隨著網路和大數據時代的到來,越來越多的資料被動態產生並呈現在網頁中,這就為資料收集和處理帶來了新的挑戰。這時候Web爬蟲技術就應運而生。 Web爬蟲技術是指透過編寫程式自動取得網路上的資訊的技術。 Python作為一種強大的程式語言,具有簡單易學、高效易用、跨平台等優點,已成為Web爬蟲開發中的重要選擇。
本文將系統地介紹Python中常用的Web爬蟲技術,包括請求模組、解析模組、儲存模組等面向。
一、請求模組
請求模組是Web爬蟲的核心,它可以模擬瀏覽器發送請求,取得需要的頁面內容。常用的請求模組有urllib、Requests和Selenium。
urllib是Python自帶的一個HTTP請求模組,可以根據URL從網路上取得網頁數據,支援URL編碼、修改請求頭、post、 cookie等功能。常用的函式有urllib.request.urlopen()、urllib.request.urlretrieve()、urllib.request.build_opener()等。
透過urllib.request.urlopen()函數可以得到網站的原始碼:
import urllib.request response = urllib.request.urlopen('http://www.example.com/') source_code = response.read().decode('utf-8') print(source_code)
Requests是一個Python第三方函式庫,它比urllib更簡單易用,支援cookie、POST、代理等功能。常用的函數有requests.get()、requests.post()、requests.request()等。
透過requests.get()函數可以得到回應的內容:
import requests response = requests.get('http://www.example.com/') source_code = response.text print(source_code)
Selenium是一個自動化測試工具,在Web爬蟲中,它可以透過啟動一個瀏覽器來模擬人的操作,能夠實現獲取JS動態產生的頁面資料等功能。常用的函式有selenium.webdriver.Chrome()、selenium.webdriver.Firefox()、selenium.webdriver.PhantomJS()等。
透過Selenium取得網頁原始碼:
from selenium import webdriver browser = webdriver.Chrome() # 打开Chrome浏览器 browser.get('http://www.example.com/') source_code = browser.page_source # 获取网页源代码 print(source_code)
二、解析模組
#得到網頁原始碼後,下一步就是解析這個檔案了。 Python中常用的解析模組有正規表示式、BeautifulSoup和PyQuery。
正規表示式是一個神奇而強大的工具,它可以按照模式匹配字串,可以快速提取所需的資料。 Python中可以使用re模組來呼叫正規表示式。
例如,提取網頁中的所有連結:
import re source_code = """ <!DOCTYPE html> <html> <head> <title>Example</title> </head> <body> <a href="http://www.example.com/">example</a> <a href="http://www.google.com/">google</a> </body> </html> """ pattern = re.compile('<a href="(.*?)">(.*?)</a>') # 匹配所有链接 results = re.findall(pattern, source_code) for result in results: print(result[0], result[1])
Beautiful Soup是Python的一個函式庫,它可以將HTML檔或XML檔案解析成樹狀結構,以便方便地取得HTML/XML檔案中的資料。它支援多種解析器,常用的有Python內建的html.parser、lxml和html5lib。
例如,解析出網頁中的所有連結:
from bs4 import BeautifulSoup source_code = """ <!DOCTYPE html> <html> <head> <title>Example</title> </head> <body> <a href="http://www.example.com/">example</a> <a href="http://www.google.com/">google</a> </body> </html> """ soup = BeautifulSoup(source_code, 'html.parser') links = soup.find_all('a') for link in links: print(link.get('href'), link.string)
PyQuery是一個類似jQuery的Python函式庫,它將HTML文件轉換成類似jQuery的結構,可以透過CSS選擇器直接取得網頁中的元素。它依賴lxml庫。
例如,解析出網頁中的所有連結:
from pyquery import PyQuery as pq source_code = """ <!DOCTYPE html> <html> <head> <title>Example</title> </head> <body> <a href="http://www.example.com/">example</a> <a href="http://www.google.com/">google</a> </body> </html> """ doc = pq(source_code) links = doc('a') for link in links: print(link.attrib['href'], link.text_content())
三、儲存模組
得到所需的資料後,下一步就是將資料儲存到本機或資料庫中。 Python中常用的儲存模組有檔案模組、MySQLdb、pymongo等。
檔案模組可以將資料儲存到本機,常用的檔案模組有CSV、JSON、Excel等。其中,CSV模組是最常用的檔案模組之一,它可以將資料寫入到CSV檔案中。
例如,將資料寫入CSV檔案:
import csv filename = 'example.csv' data = [['name', 'age', 'gender'], ['bob', 25, 'male'], ['alice', 22, 'female']] with open(filename, 'w', encoding='utf-8', newline='') as f: writer = csv.writer(f) for row in data: writer.writerow(row)
MySQLdb是Python連結MySQL資料庫的一個函式庫,它支援事務、遊標等多種功能。
例如,將資料儲存到MySQL資料庫:
import MySQLdb conn = MySQLdb.connect(host='localhost', port=3306, user='root', passwd='password', db='example', charset='utf8') cursor = conn.cursor() data = [('bob', 25, 'male'), ('alice', 22, 'female')] sql = "INSERT INTO users (name, age, gender) VALUES (%s, %s, %s)" try: cursor.executemany(sql, data) conn.commit() except: conn.rollback() cursor.close() conn.close()
pymongo是Python連結MongoDB資料庫的一個函式庫,它支援多種操作,如增刪改查等。
例如,將資料儲存到MongoDB資料庫:
import pymongo client = pymongo.MongoClient('mongodb://localhost:27017/') db = client['example'] collection = db['users'] data = [{'name': 'bob', 'age': 25, 'gender': 'male'}, {'name': 'alice', 'age': 22, 'gender': 'female'}] collection.insert_many(data)
四、總結
Python中的Web爬蟲技術包括請求模組、解析模組和儲存模組等方面,其中,請求模組是Web爬蟲的核心,解析模組是獲取資料的重要管道,儲存模組是將資料持久化的必經之路。 Python在Web爬蟲開發中具有簡單易學、高效易用、跨平台等優點,已成為Web爬蟲開發中的重要選擇。
以上是基於Python的Web爬蟲技術詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!