- Python 网络爬虫教程
- Python 网络爬虫 - 首页
- 介绍
- Python 入门
- 用于网络爬虫的 Python 模块
- 网络爬虫的合法性
- 数据提取
- 数据处理
- 处理图像和视频
- 处理文本
- 爬取动态网站
- 爬取基于表单的网站
- 处理验证码
- 使用爬虫进行测试
- Python 网络爬虫资源
- Python 网络爬虫 - 快速指南
- Python 网络爬虫 - 资源
- Python 网络爬虫 - 讨论
Python 网络爬虫 - 数据处理
在前面的章节中,我们学习了如何使用各种 Python 模块从网页中提取数据,也就是网络爬虫。在本节中,让我们了解各种处理已爬取数据的技术。
介绍
为了处理已爬取的数据,我们必须将数据以特定的格式(如电子表格(CSV)、JSON 或有时是 MySQL 等数据库)存储在本地计算机上。
CSV 和 JSON 数据处理
首先,我们将从网页抓取信息后,将其写入 CSV 文件或电子表格。让我们先通过一个简单的例子来理解,在这个例子中,我们将首先使用 **BeautifulSoup** 模块(如前所述)抓取信息,然后使用 Python 的 CSV 模块将文本信息写入 CSV 文件。
首先,我们需要导入必要的 Python 库,如下所示:
import requests from bs4 import BeautifulSoup import csv
在下面的代码行中,我们使用 requests 发出对 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 脚本中相同,但这次抓取的信息使用 Python 的 JSON 模块保存到 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 库,在这里我们使用 **requests** 和 **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://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://tutorialspoint.com/postgresql/. 可以使用以下命令安装 psycopg2 Python 库:
pip install psycopg2