📅  最后修改于: 2020-11-07 08:02:18             🧑  作者: Mango
在前面的章节中,我们学习了有关通过各种Python模块从网页中提取数据或进行网页抓取的知识。在本章中,让我们研究各种技术来处理已抓取的数据。
要处理已抓取的数据,我们必须将数据以特定格式存储在本地计算机上,例如电子表格(CSV),JSON或有时存储在MySQL等数据库中。
首先,从网页抓取后,我们将信息写入CSV文件或电子表格中。让我们首先通过一个简单的示例来理解,在该示例中,我们将像以前一样先使用BeautifulSoup模块获取信息,然后通过使用Python CSV模块将文本信息写入CSV文件。
首先,我们需要导入必要的Python库,如下所示:
import requests
from bs4 import BeautifulSoup
import csv
在下面的代码行中,我们使用请求通过发出GET请求来对URL进行GET HTTP请求: https ://authoraditiagarwal.com/。
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)
运行此脚本后,抓取的信息(即网页标题)将保存在本地计算机上的上述文本文件中。
有时我们可能希望将抓取的数据保存在本地存储中以进行存档。但是,如果我们需要大规模存储和分析这些数据怎么办?答案是名为Amazon S3或AWS S3的云存储服务(简单存储服务)。基本上,AWS S3是对象存储,旨在存储和从任何地方检索任何数量的数据。
我们可以按照以下步骤在AWS S3中存储数据-
步骤1-首先,我们需要一个AWS账户,该账户将为我们提供在存储数据时在Python脚本中使用的秘密密钥。它将创建一个S3存储桶,我们可以在其中存储数据。
步骤2-接下来,我们需要安装boto3 Python库来访问S3存储桶。可以在以下命令的帮助下进行安装-
pip install boto3
步骤3-接下来,我们可以使用以下Python脚本从网页中抓取数据并将其保存到AWS S3存储桶。
首先,我们需要导入Python库进行抓取,这里我们正在处理request ,并且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,则可以单击链接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的数据库已准备就绪,可以将数据从Web抓取后保存到名为Scrap_pages的表中。在此示例中,我们将从Wikipedia抓取数据,并将其保存到我们的数据库中。
首先,我们需要导入所需的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()
现在,连接Wikipedia并从中获取数据。
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()
这会将从Wikipedia收集的数据保存到名为scrap_pages的表中。如果您熟悉MySQL和Web抓取,那么上面的代码将不难理解。
由世界各地的志愿者团队开发的PostgreSQL是一种开源关系数据库管理系统(RDMS)。使用PostgreSQL处理抓取的数据的过程与MySQL相似。会有两个变化:首先,命令将与MySQL不同,其次,在这里我们将使用psycopg2 Python库执行与Python的集成。
如果您不熟悉PostgreSQL,则可以访问https://www.tutorialspoint.com/postgresql/。并在以下命令的帮助下,我们可以安装psycopg2 Python库-
pip install psycopg2