- 首頁(yè)
- 新聞
- 影視
摘要:爬取糗百內(nèi)容代碼地址微信公眾號(hào)智能制造社區(qū),歡迎關(guān)注。爬蟲(chóng)程序一般是通過(guò)模擬瀏覽器對(duì)相應(yīng)發(fā)出請(qǐng)求,獲取數(shù)據(jù),并通過(guò)正則等手段匹配出頁(yè)面中我們所需的數(shù)據(jù)。庫(kù)基本介紹是學(xué)習(xí)爬蟲(chóng)的一大利器。
爬取糗百內(nèi)容
GitHub 代碼地址https://github.com/injetlee/Python/blob/master/qiubai_crawer.py
微信公眾號(hào):【智能制造社區(qū)】,歡迎關(guān)注。
本文目標(biāo)掌握爬蟲(chóng)的基本概念
Requests 及 Beautiful Soup 兩個(gè) Python 庫(kù)的基本使用
通過(guò)以上知識(shí)完成糗百段子抓取
爬蟲(chóng)基本概念爬蟲(chóng)也稱(chēng)網(wǎng)頁(yè)蜘蛛,主要用于抓取網(wǎng)頁(yè)上的特定信息。這在我們需要獲取一些信息時(shí)非常有用,比如我們可以批量到美圖網(wǎng)站下載圖片,批量下載段子。省去手工操作的大量時(shí)間。爬蟲(chóng)程序一般是通過(guò)模擬瀏覽器對(duì)相應(yīng)URL發(fā)出請(qǐng)求,獲取數(shù)據(jù),并通過(guò)正則等手段匹配出頁(yè)面中我們所需的數(shù)據(jù)。
在學(xué)習(xí)爬蟲(chóng)之前,最好到 w3school 去了解一下 HTML 標(biāo)簽的概念以及基本的 CSS 的概念。這會(huì)讓我們更容易的理解如何獲取頁(yè)面中某個(gè)內(nèi)容。
Requests 庫(kù)基本介紹Requests 是學(xué)習(xí)爬蟲(chóng)的一大利器。是一個(gè)優(yōu)雅簡(jiǎn)單的 HTTP庫(kù)。官網(wǎng)介紹如下:
Requests: HTTP for Humans
專(zhuān)門(mén)為人類(lèi)使用的 HTTP 庫(kù)。使用起來(lái)非常簡(jiǎn)單明了。
我們平時(shí)瀏覽網(wǎng)頁(yè)的步驟是輸入網(wǎng)址,打開(kāi)。在 Requests 中是如下這樣的,我們可以在 Python 交互式解釋器中輸入以下代碼:
import requests r = requests.get("https://www.qiushibaike.com/text/") # 打開(kāi)網(wǎng)址,一般我們會(huì)設(shè)置 請(qǐng)求頭,來(lái)更逼真的模擬瀏覽器,下文有介紹 r.text
我門(mén)看到下面一堆的代碼,其實(shí)就是網(wǎng)頁(yè)的源代碼(也可以在瀏覽器上右鍵查看頁(yè)面源代碼)。通過(guò)這幾行代碼我們就拿到了頁(yè)面的所有信息,剩下的就是從頁(yè)面中找到我們所需要的信息。
Beautiful Soup 庫(kù)介紹拿到網(wǎng)頁(yè)信息后,我們要解析頁(yè)面,通常來(lái)說(shuō)我們有以下幾種方式來(lái)解析頁(yè)面,獲取我們所需的信息。
正則表達(dá)式
適用于簡(jiǎn)單數(shù)據(jù)的匹配,如果匹配內(nèi)容較復(fù)雜,正則表達(dá)式寫(xiě)起來(lái)會(huì)很繞,同時(shí)頁(yè)面內(nèi)容稍微變化,正則就會(huì)失效
Lxml
Lxml 是專(zhuān)門(mén)用來(lái)解析 XML 格式文件的庫(kù),該模塊用 C 語(yǔ)言編寫(xiě),解析速度很快,和正則表達(dá)式速度差不多,但是提供了 XPath 和 CSS 選擇器等定位元素的方法
Beautiful Soup
這是一個(gè) Python 實(shí)現(xiàn)的解析庫(kù),相比較于前兩種來(lái)說(shuō),語(yǔ)法會(huì)更簡(jiǎn)單明了一點(diǎn),文檔也比較詳細(xì)。唯一的一點(diǎn)就是運(yùn)行速度比前兩種方式慢幾倍,當(dāng)數(shù)據(jù)量非常大時(shí)相差會(huì)更多。
本文作為入門(mén)教程,就從 Beautiful Soup 入手,來(lái)學(xué)習(xí)一下匹配頁(yè)面所需元素的方法。
假如有以下 HTML 內(nèi)容 example.html
Page Title
我們通過(guò) Beautiful Soup 來(lái)解析這個(gè) html. 首先我們pip install beautifulsoup4安裝這個(gè)庫(kù),并看一下簡(jiǎn)單使用。
>>>from bs4 import BeautifulSoup >>>soup = BeautifulSoup("example.html", "html.parser") #加載我們的html文件 >>>soup.find("div") # 找到 div 標(biāo)簽 "" >>>soup.find_all("li") # 找到所有 li 標(biāo)簽 "[
詳細(xì)的操作可以去看一下文檔,文檔非常詳細(xì),例子也很多,簡(jiǎn)單明了。
糗百爬蟲(chóng)代碼我們先爬取純文本的內(nèi)容 https://www.qiushibaike.com/t... 爬取這個(gè)鏈接下的內(nèi)容。我們把頁(yè)面結(jié)構(gòu)截圖如下,我們要獲取的信息,我用紅色的方框進(jìn)行了標(biāo)注。
圖一:
圖二:
import requests from bs4 import BeautifulSoup def download_page(url): headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"} r = requests.get(url, headers=headers) # 增加headers, 模擬瀏覽器 return r.text def get_content(html, page): output = """第{}頁(yè) 作者:{} 性別:{} 年齡:{} 點(diǎn)贊:{} 評(píng)論:{} {} ------------ """ # 最終輸出格式 soup = BeautifulSoup(html, "html.parser") con = soup.find(id="content-left") # 如圖一紅色方框 con_list = con.find_all("div", class_="article") # 找到文章列表 for i in con_list: author = i.find("h2").string # 獲取作者名字 content = i.find("div", class_="content").find("span").get_text() # 獲取內(nèi)容 stats = i.find("div", class_="stats") vote = stats.find("span", class_="stats-vote").find("i", class_="number").string comment = stats.find("span", class_="stats-comments").find("i", class_="number").string author_info = i.find("div", class_="articleGender") # 獲取作者 年齡,性別 if author_info is not None: # 非匿名用戶(hù) class_list = author_info["class"] if "womenIcon" in class_list: gender = "女" elif "manIcon" in class_list: gender = "男" else: gender = "" age = author_info.string # 獲取年齡 else: # 匿名用戶(hù) gender = "" age = "" save_txt(output.format(page, author, gender, age, vote, comment, content)) def save_txt(*args): for i in args: with open("qiubai.txt", "a", encoding="utf-8") as f: f.write(i) def main(): # 我們點(diǎn)擊下面鏈接,在頁(yè)面下方可以看到共有13頁(yè),可以構(gòu)造如下 url, # 當(dāng)然我們最好是用 Beautiful Soup找到頁(yè)面底部有多少頁(yè)。 for i in range(1, 14): url = "https://qiushibaike.com/text/page/{}".format(i) html = download_page(url) get_content(html, i) if __name__ == "__main__": main()
運(yùn)行代碼后,我們會(huì)得到 "qiubai.txt"文件,打開(kāi)后如下所示
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/42083.html
摘要:在這之前,還是有必要對(duì)一些概念超輕量級(jí)反爬蟲(chóng)方案后端掘金前言爬蟲(chóng)和反爬蟲(chóng)日益成為每家公司的標(biāo)配系統(tǒng)。 爬蟲(chóng)修煉之道——從網(wǎng)頁(yè)中提取結(jié)構(gòu)化數(shù)據(jù)并保存(以爬取糗百文本板塊所有糗事為例) - 后端 - 掘金歡迎大家關(guān)注我的專(zhuān)題:爬蟲(chóng)修煉之道 上篇 爬蟲(chóng)修煉之道——編寫(xiě)一個(gè)爬取多頁(yè)面的網(wǎng)絡(luò)爬蟲(chóng)主要講解了如何使用python編寫(xiě)一個(gè)可以下載多頁(yè)面的爬蟲(chóng),如何將相對(duì)URL轉(zhuǎn)為絕對(duì)URL,如何限速,...
摘要:歡迎關(guān)注公號(hào)智能制造社區(qū)學(xué)習(xí)更多原創(chuàng)智能制造及編程知識(shí)。無(wú)無(wú)無(wú)無(wú)無(wú)無(wú)無(wú)獲取所有數(shù)據(jù)了解了如何解析數(shù)據(jù),剩下的就是連續(xù)請(qǐng)求所有頁(yè)面了,我們構(gòu)造一個(gè)函數(shù)來(lái)請(qǐng)求所有頁(yè)的數(shù)據(jù)。 前兩篇我們分別爬取了糗事百科和妹子圖網(wǎng)站,學(xué)習(xí)了 Requests, Beautiful Soup 的基本使用。不過(guò)前兩篇都是從靜態(tài) HTML 頁(yè)面中來(lái)篩選出我們需要的信息。這一篇我們來(lái)學(xué)習(xí)下如何來(lái)獲取 Ajax 請(qǐng)求...
摘要:責(zé)編現(xiàn)代化的方式開(kāi)發(fā)一個(gè)圖片上傳工具前端掘金對(duì)于圖片上傳,大家一定不陌生。之深入事件機(jī)制前端掘金事件綁定的方式原生的事件綁定方式有幾種想必有很多朋友說(shuō)種目前,在本人目前的研究中,只有兩種半兩種半還有半種的且聽(tīng)我道來(lái)。 Ajax 與數(shù)據(jù)傳輸 - 前端 - 掘金背景 在沒(méi)有ajax之前,前端與后臺(tái)傳數(shù)據(jù)都是靠表單傳輸,使用表單的方法傳輸數(shù)據(jù)有一個(gè)比較大的問(wèn)題就是每次提交數(shù)據(jù)都會(huì)刷新頁(yè)面,用...
摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:楚江數(shù)據(jù)是專(zhuān)業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)以供學(xué)習(xí),。本文來(lái)源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲(chóng)軟件定制開(kāi)發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類(lèi)信息學(xué)術(shù)研究等。 楚江數(shù)據(jù)是專(zhuān)業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)以供學(xué)習(xí),http://www.chujiangdata.com。 第一:Python爬蟲(chóng)學(xué)習(xí)系列教程(來(lái)源于某博主:htt...
閱讀 4507·2021-11-22 09:34
閱讀 2761·2021-11-12 10:36
閱讀 804·2021-08-18 10:23
閱讀 2696·2019-08-30 15:55
閱讀 3227·2019-08-30 15:53
閱讀 2138·2019-08-30 15:44
閱讀 1412·2019-08-29 15:37
閱讀 1524·2019-08-29 13:04