Python爬蟲實踐 -- 記錄個人第二隻爬蟲

一、爬蟲基本原理

咱們爬取中國電影最受歡迎的影片《紅海行動》的相關信息。其實,爬蟲獲取網頁信息和人工獲取信息,原理基本是一致的。python

人工操做步驟: 
1. 獲取電影信息的頁面 
2. 定位(找到)到評分信息的位置 
3. 複製、保存咱們想要的評分數據正則表達式

爬蟲操做步驟: 
1. 請求並下載電影頁面信息 
2. 解析並定位評分信息 
3. 保存評分數據數據庫

綜合言之,原理圖以下:服務器

二、爬蟲的基本流程

簡單來講,咱們向服務器發送請求後,會獲得返回的頁面;經過解析頁面以後,咱們能夠抽取咱們想要的那部分信息,並存儲在指定的文檔或數據庫中。這樣,咱們想要的信息就被咱們「爬」下來啦~數據結構

三、安裝python依賴包 Requests+Xpath 

Python 中爬蟲相關的包不少:Urllib、requsts、bs4……咱們從簡單 requests+xpath 上手!更高級的 BeautifulSoup 仍是有點難的。工具

而後咱們安裝 requests+xpath 的應用包以爬取豆瓣電影:性能

在Windows 終端分別輸入如下兩行代碼:學習

  • pip install requests
  • pip install lxml

 

四、代碼整理--獲取豆瓣電影目標網頁並解析

咱們要爬取豆瓣電影《紅海行動》相關信息,目標地址是:https://movie.douban.com/subject/26861685/網站

給定 url 並用 requests.get() 方法來獲取頁面的text,用 etree.HTML() 來解析下載的頁面數據「data」。url

1 url = 'https://movie.douban.com/subject/26861685/'
2 data = requests.get(url).text 3 s=etree.HTML(data)

 

五、獲取電影名稱

獲取元素的Xpath信息並得到文本:

 1 file=s.xpath('元素的Xpath信息/text()') 

這裏的「元素的Xpath信息」是須要咱們手動獲取的,獲取方式爲:定位目標元素,在網站上依次點擊:右鍵 > 檢查

快捷鍵「shift+ctrl+c」,移動鼠標到對應的元素時即可看到對應網頁代碼

在電影標題對應的代碼上依次點擊 右鍵 > Copy > Copy XPath,獲取電影名稱的Xpath:

 

這樣咱們就把元素中的Xpath信息複製下來了:

//*[@id="content"]/h1/span[1]

放到代碼中並打印信息:

film=s.xpath('//*[@id="content"]/h1/span[1]/text()') print(film)

 

六、 代碼以及運行結果

以上完整代碼以下:

import requests from lxml import etree url = 'https://movie.douban.com/subject/26861685/' data = requests.get(url).text s=etree.HTML(data) film=s.xpath('//*[@id="content"]/h1/span[1]/text()') 
print (film)

 

在 Pycharm 中運行完整代碼及結果以下:

至此,咱們完成了爬取豆瓣電影《紅海行動》中「電影名稱」信息的代碼編寫,能夠在 Pycharm 中運行。

 

七、 獲取其它元素信息

除了電影的名字,咱們還能夠獲取導演、主演、電影片長等信息,獲取的方式是相似的。代碼以下:

director=s.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')             #導演
actor1=s.xpath('//*[@id="info"]/span[3]/span[2]/span[1]/a/text()')  #主演1
actor2=s.xpath('//*[@id="info"]/span[3]/span[2]/span[2]/a/text()')  #主演2
actor3=s.xpath('//*[@id="info"]/span[3]/span[2]/span[3]/a/text()')  #主演3
time=s.xpath(‘//*[@id="info"]/span[12]/text()') #電影片長

 

觀察上面的代碼,發現獲取不一樣「主演」信息時,區別只在於「span[x]」中「x」的數字大小不一樣。實際上,要一次性獲取全部「主演」的信息時,用不加數字的「a」表示便可。代碼以下:

actor=s.xpath('//*[@id="info"]/span[3]/span[2]/a/text()') #主演

完整代碼以下:

import requests from lxml import etree url = 'https://movie.douban.com/subject/26861685/' data = requests.get(url).text s=etree.HTML(data) film=s.xpath('//*[@id="content"]/h1/span[1]/text()')               #導演
director=s.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')    #導演
actor=s.xpath('//*[@id="info"]/span[3]/span[2]/a/text()')        #主演
time=s.xpath('//*[@id="info"]/span[12]/text()')                        #電影片長

print('電影名稱:',film) print('導演:',director) print('主演:',actor) print('片長:',time)

 

在 Pycharm 中運行完整代碼結果以下:

 

八、 關於解析神器 Xpath

Xpath 即爲 XML 路徑語言(XML Path Language),它是一種用來肯定 XML 文檔中某部分位置的語言。

Xpath 基於 XML 的樹狀結構,提供在數據結構樹中找尋節點的能力。起初 Xpath 的提出的初衷是將其做爲一個通用的、介於 Xpointer 與 XSL 間的語法模型。可是Xpath 很快的被開發者採用來看成小型查詢語言。

Xpath解析網頁的流程: 

1. 首先經過Requests庫獲取網頁數據 
2. 經過網頁解析,獲得想要的數據或者新的連接 
3. 網頁解析能夠經過 Xpath 或者其它解析工具進行,Xpath 在是一個很是好用的網頁解析工具

                  

 

      常見的網頁解析方法比較

                 

    • 正則表達式使用比較困難,學習成本較高
    • BeautifulSoup 性能較慢,相對於 Xpath 較難,在某些特定場景下有用
    • Xpath 使用簡單,速度快(Xpath是lxml裏面的一種),是入門最好的選擇
相關文章
相關標籤/搜索