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

2021-02-26 機器學習實驗室

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

基礎爬蟲的固定模式

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


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

requests+BeautifulSoup

requests+lxml

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

    筆者以騰訊新聞首頁的新聞信息抓取為例。
    首頁外觀如下:

    比如說我們想抓取每個新聞的標題和連結,並將其組合為一個字典的結構列印出來。首先查看HTML源碼確定新聞標題信息組織形式。

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

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    })

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

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的方式。效果如下:

import requests
from lxml import etreeheaders = {    '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方法。效果如下:

import requests
import lxml.html as HTMLheaders = {'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熟練、還需要懂資料庫,更不用說正則表達式、XPath表達式這些。其實對於一個簡單網頁的數據抓取,不妨多嘗試幾種抓取方案,舉一反三,也更能對python爬蟲有較深的理解。長此以往,對於各類網頁結構都有所涉獵,自然經驗豐富,水到渠成。

往期精彩:

談談過擬合

一個統計方向畢業生的2017年數據科學從業之路總結

以虎嗅網4W+文章的文本挖掘為例,展現數據分析的一整套流程

gganimate:構建R語言可視化gif動圖

使用jupyter notebook搭建數據科學最佳交互式環境

R Markdown|可能是你數據分析報告最好的解決方案

如何寫出整潔規範的R代碼?是時候討論一下代碼規範性了

[譯]為什麼R語言是當今最值得學習的數據科學語言

一個數據科學從業者的學習歷程

相關焦點

  • 使用Python爬蟲實現自動下載圖片
    python爬蟲支持模塊多、代碼簡潔、開發效率高 ,是我們進行網絡爬蟲可以選取的好工具。
  • Python爬蟲之App爬蟲視頻下載的實現
    那我們怎麼用python編程知道他的數據是怎麼形成的,通過電腦端如何爬取。相信大家也有這樣的問題。下面我將講解這些操作流程。這是我們模擬器裡的app,app名字我會在下面評論發出。這裡的所和上面的正好相對應,這裡相信我們大家都找到了,我們可以把fidder抓包到的數據在這裡,這個是我們的數據網址https://v.6.cn/coop/mobile/index.php?
  • Python爬蟲之urllib庫—爬蟲的第一步
    當時的感覺就是:哇,好厲害,短短幾行竟然就可以搞定一個看似很複雜的任務,於是就在想這短短的幾行代碼到底是怎麼實現的呢,如何進行更高級複雜的爬取呢?帶著這個問題我也就開始了urllib庫的學習。首先不得不提一下爬取數據的過程,弄清楚這到底是怎樣一個過程,學習urllib的時候會更方便理解。  其實,爬蟲的過程和瀏覽器瀏覽網頁的過程是一樣的。
  • Python爬蟲——培訓
    Python這門程式語言包羅萬象,可以說掌握了python,除了一些特殊環境和高度的性能要求,Python 越來越適合於做科學計算。網絡爬蟲(又被稱為網頁蜘蛛,網絡機器人,在 FOAF 社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動的抓取全球資訊網信息的程序或者腳本。
  • Python爬蟲:一些常用的爬蟲技巧總結
    也差不多一年多了,python應用最多的場景還是web快速開發、爬蟲、自動化運維:寫過簡單網站、寫過自動發帖腳本、寫過收發郵件腳本、寫過簡單驗證碼識別腳本。,於是對爬蟲一律拒絕請求。:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正則表達式在線測試:http://tool.oschina.net/regex/ 其次就是解析庫了,常用的有兩個lxml和BeautifulSoup,對於這兩個的使用介紹兩個比較好的網站:lxml:http://my.oschina.net
  • Python爬蟲實戰 | 只需 「4步」 入門網絡爬蟲(有福利哦)
    網絡爬蟲(Web crawler),就是通過網址獲得網絡中的數據、然後根據目標解析數據、存儲目標信息。這個過程可以自動化程序實現,行為類似一個蜘蛛。蜘蛛在網際網路上爬行,一個一個網頁就是蜘蛛網。這樣蜘蛛可以通過一個網頁爬行到另外一個網頁。
  • AutoScraper: Python 實現的輕量級爬蟲
    【導讀】該項目專為自動爬蟲而設計,使爬蟲變得容易。它獲取網頁的url或html內容以及我們要從該頁面抓取的示例數據列表。
  • Python 爬蟲的工具列表
    cssselect – 解析DOM樹和CSS選擇器。pyquery – 解析DOM樹和jQuery選擇器。BeautifulSoup – 低效HTML/ XML處理庫,純Python實現。html5lib – 根據WHATWG規範生成HTML/ XML文檔的DOM。該規範被用在現在所有的瀏覽器上。
  • 經驗 Python爬蟲基礎
    作者:voidking 原文:https://segmentfault.com/a/1190000008191015前言Python 非常適合用來開發網頁爬蟲,理由如下:1、抓取網頁本身的接口相比與其他靜態程式語言,如 java , c#, c ++, python 抓取網頁文檔的接口更簡潔;相比其他動態腳本語言
  • Python學習之路----爬蟲
    爬蟲就是模擬瀏覽器抓取東西,爬蟲三部曲:數據爬取、數據解析、數據存儲數據爬取:手機端、pc端數據解析:正則表達式數據存儲:存儲到文件、存儲到資料庫2.相關python庫爬蟲需要兩個庫模塊:requests和re1. requests庫requests是比較簡單易用的HTTP庫,相較於urllib會簡潔很多,但由於是第三方庫,所以需要安裝,文末附安裝教程連結(連結全在後面,這樣會比較方便看吧,貼心吧~)requests庫支持的HTTP特性:保持活動和連接池、Cookie持久性會話、分段文件上傳
  • 乾貨 | Python 爬蟲的工具列表大全
    cssselect – 解析DOM樹和CSS選擇器。pyquery – 解析DOM樹和jQuery選擇器。BeautifulSoup – 低效HTML/ XML處理庫,純Python實現。html5lib – 根據WHATWG規範生成HTML/ XML文檔的DOM。該規範被用在現在所有的瀏覽器上。
  • Python3 網絡爬蟲快速入門實戰解析
    Python3 網絡爬蟲快速入門實戰解析說這麼多,什麼意思呢?瀏覽器就是作為客戶端從伺服器端獲取信息,然後將信息解析,並展示給我們的。Python3 網絡爬蟲快速入門實戰解析官方中文教程地址:http://docs.python-requests.org/zh_CN/latest/user/quickstart.htmlrequests 庫的開發者為我們提供了詳細的中文教程
  • Python開發簡單爬蟲【學習資料總結】
    URL管理器返回是/否;2、如果是,調度器會從URL管理器中取出一個待爬URL;3、調度器將URL傳給下載器,下載網頁內容後返回給調度器;4、調度器再將返回的網頁內容發送到解析器,解析URL內容,解析完成後返回有價值的數據和新的
  • Python 爬蟲入門
    一、Python 開發環境的搭建 Python 目前流行 Python 2.x 與 Python 3.x 兩個版本,由於 Python 2 只會維護到 2020 年,因此這裡建議使用 python 3 來作為編程環境。
  • 通過python非常簡單的實現一個功能強大的爬蟲
    學習python的重要性我這裡就不贅述了。本文主要是通過python簡單的來實現一個功能強大的爬蟲。讓零基礎的小白們體會python的強大,和簡單,主要是簡單!那麼言歸正傳,我們進入正題。       首先我們需要了解什麼是爬蟲。爬蟲,或者說叫網絡爬蟲。
  • 什麼是Python網絡爬蟲?看這篇清晰多了!
    網絡爬蟲(Web crawler),就是通過網址獲得網絡中的數據、然後根據目標解析數據、存儲目標信息。這個過程可以自動化程序實現,行為類似一個蜘蛛。蜘蛛在網際網路上爬行,一個一個網頁就是蜘蛛網。這樣蜘蛛可以通過一個網頁爬行到另外一個網頁。
  • 快速實現Python爬蟲從入門到精通!
    掌握爬蟲技術就為自己未來職業發展增加了一項必要的技能。那跨行業,或者零基礎的情況下,如何快速實現爬蟲從入門到精通水平呢?下面老師根據多年的經驗為大家分享一下:主要分為下面三個方面:  首先必須理解爬蟲的原理  其次需要學會使用 python 進行網絡請求  核心內容是掌握如何爬取網頁數據的方法  老師為大家免費提供的爬蟲課程,有需要的小夥伴立即開始學習吧課程中涉及到的具體知識點包括:1.爬蟲基礎知識和軟體準備;
  • Python 爬蟲「學前班」!學會免踩坑!
    基於DOM結構的爬蟲基於DOM結構的爬蟲相對來說比較簡單,就是將 HTML 解析為 DOM 樹,然後根據語法結構進行提取信息,這種方法效率和準確性都比前一種方法高。3. 基於視覺的爬蟲基於視覺的爬蟲的開發難度同樣很高,它是通過瀏覽器接口或者瀏覽器內核對目標頁面進行袁燃,然後基於網頁的視覺規律提取網頁數據。
  • 解析3類開源爬蟲框架的優缺點
    大多數Nutch的精抽取插件,都是掛載在「頁面解析」(parser)這個掛載點的,這個掛載點其實是為了解析連結(為後續爬取提供URL),以及為搜尋引擎提供一些易抽取的網頁信息(網頁的meta信息、text文本)。4)用Nutch進行爬蟲的二次開發,爬蟲的編寫和調試所需的時間,往往是單機爬蟲所需的十倍時間不止。
  • python 爬蟲 | 解析庫之 XPath(1)
    自己學習 python 爬蟲已經有段時間了,但編程的學習過程總是邊學邊忘