1. 程式人生 > 實用技巧 >【Python爬蟲】一個簡單的網路爬蟲

【Python爬蟲】一個簡單的網路爬蟲

網頁結構的相似性

爬蟲的目的,是從網站中自動化批量提取資料。

首先嚐試完成以下操作:

從以下連結中提取電影的標題和標題後的年份:

標題 CSS 選擇器: 年份 CSS 選擇器:

從以下連結中提取每隻股票的實時價格(最大那個數字):

股票價格 CSS 選擇器

連結相似 的網頁通常具有相似的外觀。

外觀相似 的網頁通常具有相似的網頁結構。

這兩個相似性是爬蟲能夠從一系列網站中自動化提取資料的重要基礎。

程式碼:

from requests_html import HTMLSession
session = HTMLSession()
links = ['https://movie.douban.com/subject/1292052/', 'https://movie.douban.com/subject/1962665/', '
https://movie.douban.com/subject/26752088/'] for link in links: r = session.get(link) title = r.html.find('#content > h1 > span:nth-child(1)', first=True) year = r.html.find('#content > h1 > span.year', first=True) print(title.text, year.text)

也許你用了上面的 股票價格 連結作為爬取物件,你會驚訝的發現程式執行出錯了。

事實上,很多網站使用 Javascript 程式碼來生成網頁內容,你的爬蟲需要正確解析 Javascript 才能獲得你所看到的頁面。

requests_html 庫提供了一個簡單的方法來處理應對情況,你只需要在r = session.get(link)後,增加一行r.html.render(),重新執行程式碼即可。

(初次執行時需要下載一些輔助工具,請耐心等待,如果下載進度條遲遲未能出現,重新執行程式。)

from requests_html import HTMLSession
session = HTMLSession()
links = ['http://stock.finance.sina.com.cn/usstock/quotes/aapl.html', 'http://stock.finance.sina.com.cn/usstock/quotes/bidu.html', 'http://stock.finance.sina.com.cn/usstock/quotes/msft.html']

for link in links:
    r = session.get(link)
    r.html.render()
    title = r.html.find('#content > h1 > span:nth-child(1)', first=True)
    year = r.html.find('#content > h1 > span.year', first=True)
    print(title.text, year.text)