Python网页爬取 数据处理

Python网页爬取 数据处理

在前面的章节中,我们学习了通过各种Python模块从网页中爬取数据或网络刮擦。在这一章中,让我们来看看处理已被搜刮的数据的各种技术。

简介

为了处理被爬取的数据,我们必须将数据以特定的格式存储在本地机器上,如电子表格(CSV)、JSON或有时在数据库中,如MySQL

CSV和JSON数据处理

首先,我们要把从网页上爬取的信息写进CSV文件或电子表格。让我们先通过一个简单的例子来了解,在这个例子中,我们将首先使用 BeautifulSoup 模块爬取信息,就像前面做的那样,然后通过使用Python CSV模块,我们将把这些文本信息写入CSV文件。

首先,我们需要导入必要的Python库,如下所示

import requests
from bs4 import BeautifulSoup
import csv

在下面这行代码中,我们使用request对url:https://authoraditiagarwal.com/进行GET HTTP请求。

r = requests.get('<https://authoraditiagarwal.com/>')

现在,我们需要创建一个Soup对象,如下所示:

soup = BeautifulSoup(r.text, 'lxml')

现在,在接下来几行代码的帮助下,我们将把爬取的数据写进一个名为dataprocessing.csv的CSV文件。

f = csv.writer(open(' dataprocessing.csv ','w'))
f.writerow(['Title'])
f.writerow([soup.title.text])

运行这个脚本后,文本信息或网页的标题将被保存在你本地机器上的上述CSV文件中。

同样地,我们也可以将收集到的信息保存在JSON文件中。下面是一个简单易懂的Python脚本,在这个脚本中,我们要爬取与上一个Python脚本相同的信息,但这次爬取的信息是通过使用JSON Python模块保存在JSONfile.txt中。

import requests
from bs4 import BeautifulSoup
import csv
import json
r = requests.get('https://authoraditiagarwal.com/')
soup = BeautifulSoup(r.text, 'lxml')
y = json.dumps(soup.title.text)
with open('JSONFile.txt', 'wt') as outfile:
   json.dump(y, outfile)

运行这个脚本后,爬取的信息即网页的标题将被保存在你本地机器上的上述文本文件中。

使用AWS S3进行数据处理

有时,我们可能想把爬取的数据保存在本地存储中用于存档。但如果我们需要大规模地存储和分析这些数据呢?答案就是名为Amazon S3或AWS S3(简单存储服务)的云存储服务。基本上,AWS S3是一个对象存储,它是用来存储和检索任何地方的数据量的。

我们可以按照以下步骤在AWS S3中存储数据 –

第1步 - 首先我们需要一个AWS账户,它将为我们提供秘密密钥,以便在我们的Python脚本中存储数据时使用。它将创建一个S3桶,我们可以在其中存储我们的数据。

第2步 - 接下来,我们需要安装 boto3 Python库来访问S3桶。它可以在以下命令的帮助下安装

pip install boto3

第3步 - 接下来,我们可以使用下面的Python脚本,从网页上刮取数据,并将其保存到AWS S3桶。

首先,我们需要导入Python库来进行搜刮,这里我们要处理的是 请求 ,而 boto3 则是将数据保存到S3桶中。

import requests
import boto3

现在我们可以从我们的URL中刮取数据。

data = requests.get("Enter the URL").text

现在为了将数据存储到S3桶,我们需要创建S3客户端,如下所示

s3 = boto3.client('s3')
bucket_name = "our-content"

下一行代码将创建S3桶,如下所示—-。

s3.create_bucket(Bucket = bucket_name, ACL = 'public-read')
s3.put_object(Bucket = bucket_name, Key = '', Body = data, ACL = "public-read")

现在你可以从你的AWS账户中检查名称为our-content的桶。

使用MySQL处理数据

让我们学习如何使用MySQL来处理数据。如果你想了解MySQL,那么你可以按照链接https://www.tutorialspoint.com/mysql/。

在以下步骤的帮助下,我们可以将数据搜刮并处理到MySQL表中 —

第1步 - 首先,通过使用MySQL,我们需要创建一个数据库和表,我们要在其中保存我们的搜刮数据。例如,我们用下面的查询来创建表 —

CREATE TABLE Scrap_pages (id BIGINT(7) NOT NULL AUTO_INCREMENT,
title VARCHAR(200), content VARCHAR(10000),PRIMARY KEY(id));

第2步 - 接下来,我们需要处理Unicode。注意,MySQL默认不处理Unicode。我们需要在以下命令的帮助下打开这一功能,这将改变数据库、表和两列的默认字符集

ALTER DATABASE scrap CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE Scrap_pages CONVERT TO CHARACTER SET utf8mb4 COLLATE
utf8mb4_unicode_ci;
ALTER TABLE Scrap_pages CHANGE title title VARCHAR(200) CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
ALTER TABLE pages CHANGE content content VARCHAR(10000) CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

第3步 - 现在,将MySQL与Python集成。为此,我们将需要PyMySQL,它可以在以下命令的帮助下安装

pip install PyMySQL 

第4步 - 现在,我们先前创建的名为Scrap的数据库已经准备好将从网上搜刮的数据保存到名为Scrap_pages的表中。在我们的例子中,我们将从维基百科上刮取数据,并将其保存到我们的数据库中。

首先,我们需要导入所需的Python模块。

from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import pymysql
import re

现在,做一个连接,也就是把它与Python结合起来。

conn = pymysql.connect(host='127.0.0.1',user='root', passwd = None, db = 'mysql',
charset = 'utf8')
cur = conn.cursor()
cur.execute("USE scrap")
random.seed(datetime.datetime.now())
def store(title, content):
   cur.execute('INSERT INTO scrap_pages (title, content) VALUES ''("%s","%s")', (title, content))
   cur.connection.commit()

现在,与维基百科连接并从中获取数据。

def getLinks(articleUrl):
   html = urlopen('http://en.wikipedia.org'+articleUrl)
   bs = BeautifulSoup(html, 'html.parser')
   title = bs.find('h1').get_text()
   content = bs.find('div', {'id':'mw-content-text'}).find('p').get_text()
   store(title, content)
   return bs.find('div', {'id':'bodyContent'}).findAll('a',href=re.compile('^(/wiki/)((?!:).)*$'))
links = getLinks('/wiki/Kevin_Bacon')
try:
   while len(links) > 0:
      newArticle = links[random.randint(0, len(links)-1)].attrs['href']
      print(newArticle)
      links = getLinks(newArticle)

最后,我们需要同时关闭游标和连接。

finally:
   cur.close()
   conn.close()

这将把从维基百科收集的数据保存到名为scrap_pages的表中。如果你熟悉MySQL和网络爬取,那么上述代码就不难理解了。

使用PostgreSQL进行数据处理

PostgreSQL是由一个全球志愿者团队开发的,是一个开源的关系数据库管理系统(RDMS)。使用PostgreSQL处理搜刮的数据的过程与MySQL类似。会有两个变化。第一,命令与MySQL不同;第二,在这里我们将使用 psycopg2 Python库来完成它与Python的集成。

如果你不熟悉PostgreSQL,那么你可以在https://www.tutorialspoint.com/postgresql/。 在以下命令的帮助下,我们可以安装psycopg2 Python库

pip install psycopg2 

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程