您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python實現爬蟲的方法有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
首頁外觀如下:
比如說我們想抓取每個新聞的標題和鏈接,并將其組合為一個字典的結構打印出來。首先查看 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 方法。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實現爬蟲的方法有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。