欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python爬蟲的兩套解析方法和四種爬蟲實現(xiàn)過程

 更新時間:2018年07月20日 08:14:39   作者:Python火火  
本文想針對某一網(wǎng)頁對 python 基礎(chǔ)爬蟲的兩大解析庫( BeautifulSoup 和 lxml )和幾種信息提取實現(xiàn)方法進行分析,及同一網(wǎng)頁爬蟲的四種實現(xiàn)方式,需要的朋友參考下吧

對于大多數(shù)朋友而言,爬蟲絕對是學習 python 的最好的起手和入門方式。因為爬蟲思維模式固定,編程模式也相對簡單,一般在細節(jié)處理上積累一些經(jīng)驗都可以成功入門。本文想針對某一網(wǎng)頁對  python 基礎(chǔ)爬蟲的兩大解析庫(  BeautifulSoup 和  lxml )和幾種信息提取實現(xiàn)方法進行分析,以開  python 爬蟲之初見。

基礎(chǔ)爬蟲的固定模式

筆者這里所談的基礎(chǔ)爬蟲,指的是不需要處理像異步加載、驗證碼、代理等高階爬蟲技術(shù)的爬蟲方法。一般而言,基礎(chǔ)爬蟲的兩大請求庫 urllib 和  requests 中  requests 通常為大多數(shù)人所鐘愛,當然  urllib 也功能齊全。兩大解析庫  BeautifulSoup 因其強大的  HTML 文檔解析功能而備受青睞,另一款解析庫  lxml 在搭配  xpath 表達式的基礎(chǔ)上也效率提高。就基礎(chǔ)爬蟲來說,兩大請求庫和兩大解析庫的組合方式可以依個人偏好來選擇。

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

  • requests +  BeautifulSoup
  • requests +  lxml

同一網(wǎng)頁爬蟲的四種實現(xiàn)方式

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

首頁外觀如下:

 

比如說我們想抓取每個新聞的標題和鏈接,并將其組合為一個字典的結(jié)構(gòu)打印出來。首先查看 HTML 源碼確定新聞標題信息組織形式。

 

可以目標信息存在于 em 標簽下  a 標簽內(nèi)的文本和  href 屬性中??芍苯永?nbsp; requests 庫構(gòu)造請求,并用  BeautifulSoup 或者  lxml 進行解析。

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

 # select method
 import requests
 from bs4 import BeautifulSoup
 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'} 
 url = 'http://news.qq.com/' 
 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({'標題': title, 
 '鏈接': link
   })

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

 

方式二: requests +  BeautifulSoup +  find_all 進行信息提取

 # find_all method
 import requests
 from bs4 import BeautifulSoup
 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}
 url = 'http://news.qq.com/'
 Soup = BeautifulSoup(requests.get(url=url, headers=headers).text.encode("utf-8"), 'lxml') 
 em = Soup.find_all('em', attrs={'class': 'f14 l24'})for i in em:
   title = i.a.get_text()
   link = i.a['href']
   print({'標題': title,
      '鏈接': link
   })

同樣是 requests +  BeautifulSoup 的爬蟲組合,但在信息提取上采用了  find_all 的方式。效果如下:

 

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

 # lxml/etree method
 import requests
 from lxml import etree 
 headers = {  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}
 url = 'http://news.qq.com/'
 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({'標題': i[0],
 '鏈接': i[1]
   })

使用 lxml 庫下的  etree 模塊進行解析,然后使用  xpath 表達式進行信息提取,效率要略高于  BeautifulSoup +  select 方法。這里對兩個列表的組合采用了  zip 方法。python學習交流群:125240963效果如下:

 

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

 # lxml/html/fromstring method
 import requests
 import lxml.html as HTML 
 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}
 url = 'http://news.qq.com/'
 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({'標題': i[0],'鏈接': i[1]
   })

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

 

很多人覺得爬蟲有點難以掌握,因為知識點太多,需要懂前端、需要python熟練、還需要懂數(shù)據(jù)庫,更不用說正則表達式、XPath表達式這些。其實對于一個簡單網(wǎng)頁的數(shù)據(jù)抓取,不妨多嘗試幾種抓取方案,舉一反三,也更能對python爬蟲有較深的理解。長此以往,對于各類網(wǎng)頁結(jié)構(gòu)都有所涉獵,自然經(jīng)驗豐富,水到渠成。

總結(jié)

以上所述是小編給大家介紹的Python爬蟲的兩套解析方法和四種爬蟲實現(xiàn)過程,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 使用PyTorch處理多維特征輸入數(shù)據(jù)的完美實現(xiàn)

    使用PyTorch處理多維特征輸入數(shù)據(jù)的完美實現(xiàn)

    在機器學習和深度學習領(lǐng)域,我們經(jīng)常會面對具有多維特征輸入的問題,這種情況出現(xiàn)在各種應用中,包括圖像識別、自然語言處理、時間序列分析等,PyTorch是一個強大的深度學習框架,在本篇博客中,我們將探討如何使用PyTorch來處理多維特征輸入數(shù)據(jù)
    2023-10-10
  • Python中靜態(tài)方法,類方法,屬性方法使用方法

    Python中靜態(tài)方法,類方法,屬性方法使用方法

    這篇文章主要介紹了Python中靜態(tài)方法,類方法,屬性方法使用方法,文章圍繞主題的相關(guān)資料展開詳細內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • python中NumPy的安裝與基本操作

    python中NumPy的安裝與基本操作

    Python雖然也提供了array模塊,但其只支持一維數(shù)組,不支持多維數(shù)組,也沒有各種運算函數(shù),因而不適合數(shù)值運算,NumPy的出現(xiàn)彌補了這些不足,這篇文章主要給大家介紹了關(guān)于python中NumPy的安裝與基本操作的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Python django搭建layui提交表單,表格,圖標的實例

    Python django搭建layui提交表單,表格,圖標的實例

    今天小編就為大家分享一篇Python django搭建layui提交表單,表格,圖標的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python?opencv實現(xiàn)目標外接圖形

    python?opencv實現(xiàn)目標外接圖形

    這篇文章主要為大家詳細介紹了python?opencv實現(xiàn)目標外接圖形,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Django ORM 查詢管理器源碼解析

    Django ORM 查詢管理器源碼解析

    這篇文章主要介紹了Django ORM 查詢管理器源碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • opencv模板匹配相同位置去除重復的框

    opencv模板匹配相同位置去除重復的框

    這篇文章主要介紹了opencv模板匹配相同位置去除重復的框,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Python的條件鎖與事件共享詳解

    Python的條件鎖與事件共享詳解

    這篇文章主要介紹了Python的條件鎖與事件共享詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Python 時間戳之獲取整點凌晨時間戳的操作方法

    Python 時間戳之獲取整點凌晨時間戳的操作方法

    這篇文章主要介紹了Python 時間戳之獲取整點凌晨時間戳的操作方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-01-01
  • Python解析json時提示“string indices must be integers”問題解決方法

    Python解析json時提示“string indices must be integers”問題解決方法

    這篇文章主要介紹了Python解析json時提示“string indices must be integers”問題解決方法,結(jié)合實例形式分析了Python解析json字符串操作規(guī)范與相關(guān)使用技巧,需要的朋友可以參考下
    2019-07-07

最新評論