
- 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.tw/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.tw/postgresql/. 可以使用以下命令安裝 psycopg2 Python 庫:
pip install psycopg2