Python爬蟲的兩套解析方法和四種爬蟲實現
【本文轉載自微信公眾號:資料科學家養成記,作者:louwill,轉載授權請聯絡原作者】
對於大多數朋友而言,爬蟲絕對是學習python的最好的起手和入門方式。因為爬蟲思維模式固定,程式設計模式也相對簡單,一般在細節處理上積累一些經驗都可以成功入門。本文想針對某一網頁對python基礎爬蟲的兩大解析庫(BeautifulSoup和lxml)和幾種資訊提取實現方法進行分析,以開python爬蟲之初見。
基礎爬蟲的固定模式
筆者這裡所談的基礎爬蟲,指的是不需要處理像非同步載入、驗證碼、代理等高階爬蟲技術的爬蟲方法。一般而言,基礎爬蟲的兩大請求庫urllib和requests中requests通常為大多數人所鍾愛,當然urllib也功能齊全。兩大解析庫BeautifulSoup因其強大的HTML文件解析功能而備受青睞,另一款解析庫lxml在搭配xpath表示式的基礎上也效率提高。就基礎爬蟲來說,兩大請求庫和兩大解析庫的組合方式可以依個人偏好來選擇。
筆者喜歡用的爬蟲組合工具是:
-
requests+BeautifulSoup
-
requests+lxml
同一網頁爬蟲的四種實現方式
筆者以騰訊新聞首頁的新聞資訊抓取為例。
首頁外觀如下:
比如說我們想抓取每個新聞的標題和連結,並將其組合為一個字典的結構列印出來。首先檢視HTML原始碼確定新聞標題資訊組織形式。
可以目標資訊存在於em標籤下a標籤內的文字和href屬性中。可直接利用requests庫構造請求,並用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 })
很常規的處理方式,抓取效果如下:
-
方式二: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方法。效果如下:
-
方式四: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熟練、還需要懂資料庫,更不用說正規表示式、XPath表示式這些。其實對於一個簡單網頁的資料抓取,不妨多嘗試幾種抓取方案,舉一反三,也更能對python爬蟲有較深的理解。長此以往,對於各類網頁結構都有所涉獵,自然經驗豐富,水到渠成。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31077337/viewspace-2157261/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Python學習】爬蟲爬蟲爬蟲爬蟲~Python爬蟲
- 爬蟲——網頁爬取方法和網頁解析方法爬蟲網頁
- 爬取資料時防止爬蟲被限制的四種方法爬蟲
- 【python爬蟲】python爬蟲demoPython爬蟲
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- 保障爬蟲穩定執行的四種方法爬蟲
- 提升爬蟲效率的兩大方法爬蟲
- python爬蟲實戰,爬蟲之路,永無止境Python爬蟲
- 圖靈樣書爬蟲 - Python 爬蟲實戰圖靈爬蟲Python
- Python實現微博爬蟲,爬取新浪微博Python爬蟲
- 爬蟲——爬取貴陽房價(Python實現)爬蟲Python
- 爬蟲兩種繞過5s盾的方法爬蟲
- Python爬蟲之路-JS的解析Python爬蟲JS
- python的爬蟲功能如何實現Python爬蟲
- Python爬蟲是如何實現的?Python爬蟲
- Java爬蟲與Python爬蟲的區別?Java爬蟲Python
- 2個月精通Python爬蟲——3大爬蟲框架+6場實戰+反爬蟲技巧+分散式爬蟲Python爬蟲框架分散式
- Python爬蟲教程-05-python爬蟲實現百度翻譯Python爬蟲
- Python爬蟲和java爬蟲哪個效率高Python爬蟲Java
- Python 爬蟲實戰(2):股票資料定向爬蟲Python爬蟲
- python爬蟲的最佳實踐(六)--爬蟲中的多程式Python爬蟲
- 【Python爬蟲9】Python網路爬蟲例項實戰Python爬蟲
- Python 爬蟲實戰Python爬蟲
- 網路爬蟲——爬蟲實戰(一)爬蟲
- Python爬蟲教程-06-爬蟲實現百度翻譯(requests)Python爬蟲
- APP爬蟲-雙向認證抓包的兩種方法APP爬蟲
- python就是爬蟲嗎-python就是爬蟲嗎Python爬蟲
- 不踩坑的Python爬蟲:Python爬蟲開發與專案實戰,從爬蟲入門 PythonPython爬蟲
- python爬蟲第四天Python爬蟲
- Python爬蟲之路-chrome在爬蟲中的使用Python爬蟲Chrome
- Python爬蟲(1.爬蟲的基本概念)Python爬蟲
- Python 爬蟲IP代理池的實現Python爬蟲
- 反爬蟲的四種常見方式-JS逆向方法論爬蟲JS
- python爬蟲之解析連結Python爬蟲
- python爬蟲-1w+套個人簡歷模板爬取Python爬蟲
- Python爬蟲-用Scrapy框架實現漫畫的爬取Python爬蟲框架
- 爬蟲 | 基本步驟和解析網頁的幾種方法爬蟲網頁
- 爬蟲:多程式爬蟲爬蟲