Python 网页抓取 - 数据处理

在前面的章节中,我们学习了如何通过各种 Python 模块从网页或网络抓取中提取数据。 在本章中,让我们研究一下处理已抓取数据的各种技术。


简介

要处理已抓取的数据,我们必须将数据以特定格式(例如电子表格 (CSV)、JSON)或有时存储在 MySQL 等数据库中存储在本地计算机上。


CSV 和 JSON 数据处理

首先,我们将从网页抓取的信息写入 CSV 文件或电子表格。 让我们首先通过一个简单的例子来理解,我们将首先使用 BeautifulSoup 模块获取信息,就像之前所做的那样,然后通过使用 Python CSV 模块,我们将该文本信息写入 CSV 文件。

首先我们需要导入必要的Python库如下 −

import requests
from bs4 import BeautifulSoup
import csv

在下面这行代码中,我们使用 requests 为 url 发出 GET HTTP 请求: https://authoraditiagarwal.com/ 通过发出 GET 请求。

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)

运行此脚本后,抓取的信息即网页标题将保存在本地计算机上上述文本文件中。


使用MySQL进行数据处理

让我们学习如何使用 MySQL 处理数据。 如果你想了解 MySQL,那么你可以点击链接 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 的表中。 在我们的示例中,我们将从维基百科抓取数据并将其保存到我们的数据库中。

首先,我们需要导入所需的 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