python3制作捧腹網(wǎng)段子頁爬蟲
0x01
春節(jié)閑著沒事(是有多閑),就寫了個簡單的程序,來爬點笑話看,順帶記錄下寫程序的過程。第一次接觸爬蟲是看了這么一個帖子,一個逗逼,爬取煎蛋網(wǎng)上妹子的照片,簡直不要太方便。于是乎就自己照貓畫虎,抓了點圖片。
科技啟迪未來,身為一個程序員,怎么能干這種事呢,還是爬點笑話比較有益于身心健康。
0x02
在我們擼起袖子開始搞之前,先來普及點理論知識。
簡單地說,我們要把網(wǎng)頁上特定位置的內(nèi)容,扒拉下來,具體怎么扒拉,我們得先分析這個網(wǎng)頁,看那塊內(nèi)容是我們需要的。比如,這次爬取的是捧腹網(wǎng)上的笑話,打開 捧腹網(wǎng)段子頁我們可以看到一大堆笑話,我們的目的就是獲取這些內(nèi)容??赐昊貋砝潇o一下,你這樣一直笑,我們沒辦法寫代碼。在 chrome 中,我們打開 審查元素 然后一級一級的展開 HTML 標簽,或者點擊那個小鼠標,定位我們所需要的元素。
最后可以發(fā)現(xiàn) <div> 中的內(nèi)容就是我們所需要的笑話,在看第二條笑話,也是這樣。于是乎,我們就可以把這個網(wǎng)頁中所有的 <div> 找到,然后把里邊的內(nèi)容提取出來,就完成了。
0x03
好了,現(xiàn)在我們知道我們的目的了,就可以擼起袖子開始干了。這里我用的 python3,關(guān)于 python2 和 python3 的選用,大家可以自行決定,功能都可以實現(xiàn),只是有些許不同。但還是建議用 python3。
我們要扒拉下我們需要的內(nèi)容,首先我們得把這個網(wǎng)頁扒拉下來,怎么扒拉呢,這里我們要用到一個庫,叫 urllib,我們用這個庫提供的方法,來獲取整個網(wǎng)頁。
首先,我們導(dǎo)入 urllib
然后,我們就可以使用 request 來獲取網(wǎng)頁了,
return request.urlopen(url).read()
人生苦短,我用 python,一行代碼,下載網(wǎng)頁,你說,還有什么理由不用 python。
下載完網(wǎng)頁后,我們就得解析這個網(wǎng)頁了來獲取我們所需要的元素。為了解析元素,我們需要使用另外一個工具,叫做 Beautiful Soup,使用它,可以快速解析 HTML 和 XML并獲取我們所需要的元素。
用 BeautifulSoup 來解析網(wǎng)頁也就一句話,但當你運行代碼的時候,會出現(xiàn)這么一個警告,提示要指定一個解析器,不然,可能會在其他平臺或者系統(tǒng)上報錯。
The code that caused this warning is on line 64 of the file joke.py. To get rid of this warning, change code that looks like this:
BeautifulSoup([your markup])
to this:
BeautifulSoup([your markup], "lxml")
markup_type=markup_type))
解析器的種類 和 不同解析器之間的區(qū)別 官方文檔有詳細的說明,目前來說,還是用 lxml 解析比較靠譜。
修改之后
這樣,就沒有上述警告了。
利用 find_all 函數(shù),來找到所有 class = content-img clearfix pt10 relative 的 div 標簽 然后遍歷這個數(shù)組
這樣,我們就取到了目的 div 的內(nèi)容。至此,我們已經(jīng)達到了我們的目的,爬到了我們的笑話。
但當以同樣的方式去爬取糗百的時候,會報這樣一個錯誤
說遠端無響應(yīng),關(guān)閉了鏈接,看了下網(wǎng)絡(luò)也沒有問題,這是什么情況導(dǎo)致的呢?莫非是我姿勢不對?
打開 charles 抓包,果然也沒反應(yīng)。唉,這就奇怪了,好好的一個網(wǎng)站,怎么瀏覽器可以訪問,python 無法訪問呢,是不是 UA 的問題呢?看了下 charles,發(fā)現(xiàn),利用 urllib 發(fā)起的請求,UA 默認是 Python-urllib/3.5 而在 chrome 中訪問 UA 則是 User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36,那會不會是因為服務(wù)器根據(jù) UA 來判斷拒絕了 python 爬蟲。我們來偽裝下試試看行不行
headers = {'User-Agent': 'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
req = request.Request(url, headers=headers)
return request.urlopen(req).read()
這樣就把 python 偽裝成 chrome 去獲取糗百的網(wǎng)頁,可以順利的得到數(shù)據(jù)。
至此,利用 python 爬取糗百和捧腹網(wǎng)的笑話已經(jīng)結(jié)束,我們只需要分析相應(yīng)的網(wǎng)頁,找到我們感興趣的元素,利用 python 強大的功能,就可以達到我們的目的,不管是 XXOO 的圖,還是內(nèi)涵段子,都可以一鍵搞定,不說了,我去找點妹子圖看看。
# -*- coding: utf-8 -*- import sys import urllib.request as request from bs4 import BeautifulSoup def getHTML(url): headers = {'User-Agent': 'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'} req = request.Request(url, headers=headers) return request.urlopen(req).read() def get_pengfu_results(url): soup = BeautifulSoup(getHTML(url), 'lxml') return soup.find_all('div', {'class':"content-img clearfix pt10 relative"}) def get_pengfu_joke(): for x in range(1, 2): url = 'http://www.pengfu.com/xiaohua_%d.html' % x for x in get_pengfu_results(url): content = x.string try: string = content.lstrip() print(string + '\n\n') except: continue return def get_qiubai_results(url): soup = BeautifulSoup(getHTML(url), 'lxml') contents = soup.find_all('div', {'class':'content'}) restlus = [] for x in contents: str = x.find('span').getText('\n','<br/>') restlus.append(str) return restlus def get_qiubai_joke(): for x in range(1, 2): url = 'http://www.qiushibaike.com/8hr/page/%d/?s=4952526' % x for x in get_qiubai_results(url): print(x + '\n\n') return if __name__ == '__main__': get_pengfu_joke() get_qiubai_joke()
- Python3爬蟲爬取百姓網(wǎng)列表并保存為json功能示例【基于request、lxml和json模塊】
- Python3爬蟲學(xué)習之爬蟲利器Beautiful Soup用法分析
- Python3爬蟲學(xué)習之應(yīng)對網(wǎng)站反爬蟲機制的方法分析
- Python3爬蟲學(xué)習入門教程
- Python3爬蟲爬取英雄聯(lián)盟高清桌面壁紙功能示例【基于Scrapy框架】
- Python3實現(xiàn)爬蟲爬取趕集網(wǎng)列表功能【基于request和BeautifulSoup模塊】
- python3簡單實現(xiàn)微信爬蟲
- Python3實現(xiàn)的爬蟲爬取數(shù)據(jù)并存入mysql數(shù)據(jù)庫操作示例
- Python3多線程爬蟲實例講解代碼
- Python3實戰(zhàn)之爬蟲抓取網(wǎng)易云音樂的熱門評論
- Python3爬蟲學(xué)習之將爬取的信息保存到本地的方法詳解
相關(guān)文章
Appium+python+unittest搭建UI自動化框架的實現(xiàn)
本文主要介紹了Appium+python+unittest搭建UI自動化框架的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2024-03-03PyCharm Terminal終端命令行Shell設(shè)置方式
這篇文章主要介紹了PyCharm Terminal終端命令行Shell設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01Python3中bytes類型轉(zhuǎn)換為str類型
Python 3最重要的新特性之一是對字符串和二進制數(shù)據(jù)流做了明確的區(qū)分。這篇文章主要介紹了Python3中bytes類型轉(zhuǎn)換為str類型的相關(guān)知識,需要的朋友可以參考下2018-09-09linux系統(tǒng)使用python獲取cpu信息腳本分享
這篇文章主要介紹了linux系統(tǒng)使用python獲取cpu信息腳本,大家參考使用吧2014-01-01python基礎(chǔ)教程之分支、循環(huán)簡單用法
這篇文章主要介紹了python基礎(chǔ)教程之分支、循環(huán)簡單用法,結(jié)合實例形式分析了Python分支及循環(huán)語句的簡單使用方法,需要的朋友可以參考下2016-06-06