首頁 > 後端開發 > Python教學 > 基於Python的Web爬蟲技術詳解

基於Python的Web爬蟲技術詳解

王林
發布: 2023-06-17 10:28:44
原創
965 人瀏覽過

隨著網路和大數據時代的到來,越來越多的資料被動態產生並呈現在網頁中,這就為資料收集和處理帶來了新的挑戰。這時候Web爬蟲技術就應運而生。 Web爬蟲技術是指透過編寫程式自動取得網路上的資訊的技術。 Python作為一種強大的程式語言,具有簡單易學、高效易用、跨平台等優點,已成為Web爬蟲開發中的重要選擇。

本文將系統地介紹Python中常用的Web爬蟲技術,包括請求模組、解析模組、儲存模組等面向。

一、請求模組

請求模組是Web爬蟲的核心,它可以模擬瀏覽器發送請求,取得需要的頁面內容。常用的請求模組有urllib、Requests和Selenium。

  1. urllib

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)
登入後複製
  1. Requests

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)
登入後複製
  1. #Selenium

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。

  1. 正規表示式

正規表示式是一個神奇而強大的工具,它可以按照模式匹配字串,可以快速提取所需的資料。 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])
登入後複製
  1. BeautifulSoup

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)
登入後複製
  1. PyQuery

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等。

  1. 檔案模組

檔案模組可以將資料儲存到本機,常用的檔案模組有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)
登入後複製
  1. MySQLdb

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()
登入後複製
  1. pymongo

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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板