Python爬蟲的兩套解析方法和四種爬蟲實現過程

2022-10-04 19:12:08 字數 2875 閱讀 4317

對於大多數朋友而言,爬蟲絕對是學習 python 的最好的起手和入門方式。因為爬蟲思維模式固定,程式設計模式也相對簡單,一般在細節處理上積累一些經驗都可以成功入門。本文想針對某一網頁對  python 基礎爬蟲的兩大解析庫(  beautifulsoup 和  lxml )和幾種資訊提取實現方法進行分析,以開  python 爬蟲之初見。

基礎爬蟲的固定模式

筆者這裡所談的基礎爬蟲,指的是不需要處理像非同步載入、驗證碼、**等高階爬蟲技術的爬蟲方法。一般而言,基礎爬蟲的兩大請求庫 urllib 和  requests 中  requests 通常為大多數人所鍾愛,當然  urllib 也功能齊全。兩大解析庫  beautifulsoup 因其強大的 程式設計客棧 html 文件解析功能而備受青睞,另一款解析庫  lxml 在搭配  xpath 表示式的基礎上也效率提高。就基礎爬蟲來說,兩大請求庫和兩大解析庫的組合方式可以依個人偏好來選擇。

筆者喜歡用的爬蟲組合工具是:

同一網頁爬蟲的四種實現方式

筆者以騰訊新聞首頁的新聞資訊抓取為例。

首頁外觀如下:

比如說我們想抓取每個新聞的標題和鏈結,並將其組合為乙個字典的結構列印出來。首先檢視 html 原始碼確定新聞標題資訊組織形式。

可以目標資訊存在於 em 標籤下  a 標籤內的文字和  href 屬性中。可直接利用  requests 庫構造請求,並用  beautifulsoup 或者  lxml 進行解析。

方式一: requests +  beautifulsoup +  select css選擇器

# select method

import requests

from bs4 import beautifulsoup

headers =

url = ''

soup = beautifulsoup(requests.get(url=url, headers=headers).text.encode("utf-8"), 'lxml')

em = soup.select('em[class="f14 l24"] a')

for i in em:

title = i.get_text()

link = i['href']

print()

很常規的處理方式,抓取效果如下:

方式二: requests +  beautifulsoup +  find_all 進行資訊提取

# find_all method

import requests

from bs4 import beautifulsoup

headers =

url = ''

soup = beautifulsoup(requests.get(url=url, headers=headers).text.encode("utf-8"), 'lxml')

em = soup.find_all('em', attrs=)for i in em:

title = i.a.get_text()

link = i.a['href']

print()

同樣是 requests +  beautifulsoup 的爬蟲組合,但在資訊提取上採用了  find_all 的方式。效果如下:

方式三: requests +  lxml/etree +  xpath 表示式

# lxml/etree method

import requests

from lxml import etree

headers =

url = ''

html = requests.get(url = url, headers = headers)

con = etree.html(html.text)

title = con.xpath('//em[@class="f14 l24"]/a/text()')

link = con.xpath('//em[@class="f14 l24"]/a/@href')

for i in zip(title, link):

print()

使用 lxml 庫下的  etree 模組進行解析,然後使用  xpath 表示式進行資訊提取,效率要略高於  beautifulsoup +  select 方法。這裡對兩個列表的組合採用了  zip 方法。python學習***:125240963效果如下:

方式四: requests +  lxml/html/fromstring +  xpath 表示式

# lxml/html/fromstring method

import requests

import lxml.html as html

headnixpfmers =

url = ''

con = html.fromstring(requests.get(url = url, headers = headers).text)

title = con.xpath('//em[@class="f14 l24"]/a/text()')

link = con.xpath('//em[@class="f14 l24"]/a/@href')

for i in zip(title, link):

print()

跟方法三類似,只是在解析上使用了 lxml 庫下的  html.fromstring 模組。抓取效果如下:

很多人覺得爬蟲有點難以掌握,因為知識點太多,需要懂前端、需要python熟練、還需要懂資料庫,更不用說正規表示式、xpath表示式這些。其實對於乙個簡單網頁的資料抓取,不妨多嘗試幾種抓取方案,舉nixpfm一反三,也更能對python爬蟲有較深的理解。長此以往,對於各類網頁結構都有所涉獵,自然經驗豐富,水到渠成。

總結本文標題: python爬蟲的兩套解析方法和四種爬蟲實現過程

本文位址:

Python爬蟲的兩套解析方法和四種爬蟲實現

對於大多數朋友而言,爬蟲絕對是學習python的最好的起手和入門方式。因為爬蟲思維模式固定,程式設計模式也相對簡單,一般在細節處理上積累一些經驗都可以成功入門。本文想針對某一網頁對python基礎爬蟲的兩大解析庫 beautifulsoup和lxml 和幾種資訊提取實現方法進行分析,以開python...

Oracle比較相似結構的兩套表

出於某些原因,需要建立幾十張表,使用del 開頭,用於資料清理時記錄所清理的資料。比如表table1就對應del table1,但不幸的是,pdm檔案與正式庫表存在不一致,造成insert into del table1 select from table1未能正確插入,因此,有必要比較del 開頭...

ubuntu下管理網路的兩套方案

linux系統裡面有兩套管理網路連線的方案 1 etc network inte ces etc init.d networking 2 etc networkmanager 這兩套方案是衝突的,不能同時共存 第一套方案適應於沒有x的環境,如 伺服器,或者那些完全不需要改動連線的場合。第二套方案使用...