python爬虫经典段子_Python爬虫实战(1):爬取糗事百科段子
大家好,前面入門已經(jīng)說了那么多基礎(chǔ)知識了,下面我們做幾個實戰(zhàn)項目來挑戰(zhàn)一下吧。那么這次為大家?guī)?#xff0c;Python爬取糗事百科的小段子的例子。
首先,糗事百科大家都聽說過吧?糗友們發(fā)的搞笑的段子一抓一大把,這次我們嘗試一下用爬蟲把他們抓取下來。
本篇目標
1.抓取糗事百科熱門段子
2.過濾帶有圖片的段子
3.實現(xiàn)每按一次回車顯示一個段子的發(fā)布時間,發(fā)布人,段子內(nèi)容,點贊數(shù)。
糗事百科是不需要登錄的,所以也沒必要用到Cookie,另外糗事百科有的段子是附圖的,我們把圖抓下來圖片不便于顯示,那么我們就嘗試過濾掉有圖的段子吧。
好,現(xiàn)在我們嘗試抓取一下糗事百科的熱門段子吧,每按下一次回車我們顯示一個段子。
1.確定URL并抓取頁面代碼
首先我們確定好頁面的URL是 http://www.qiushibaike.com/hot/page/1,其中最后一個數(shù)字1代表頁數(shù),我們可以傳入不同的值來獲得某一頁的段子內(nèi)容。
我們初步構(gòu)建如下的代碼來打印頁面代碼內(nèi)容試試看,先構(gòu)造最基本的頁面抓取方式,看看會不會成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# -*- coding:utf-8 -*-
importurllib
importurllib2
page=1
url='http://www.qiushibaike.com/hot/page/'+str(page)
try:
request=urllib2.Request(url)
response=urllib2.urlopen(request)
printresponse.read()
excepturllib2.URLError,e:
ifhasattr(e,"code"):
printe.code
ifhasattr(e,"reason"):
printe.reason
運行程序,哦不,它竟然報錯了,真是時運不濟,命途多舛啊
1
2
3
line373,in_read_status
raiseBadStatusLine(line)
httplib.BadStatusLine:''
好吧,應(yīng)該是headers驗證的問題,我們加上一個headers驗證試試看吧,將代碼修改如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# -*- coding:utf-8 -*-
importurllib
importurllib2
page=1
url='http://www.qiushibaike.com/hot/page/'+str(page)
user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers={'User-Agent':user_agent}
try:
request=urllib2.Request(url,headers=headers)
response=urllib2.urlopen(request)
printresponse.read()
excepturllib2.URLError,e:
ifhasattr(e,"code"):
printe.code
ifhasattr(e,"reason"):
printe.reason
嘿嘿,這次運行終于正常了,打印出了第一頁的HTML代碼,大家可以運行下代碼試試看。在這里運行結(jié)果太長就不貼了。
2.提取某一頁的所有段子
好,獲取了HTML代碼之后,我們開始分析怎樣獲取某一頁的所有段子。
首先我們審查元素看一下,按瀏覽器的F12,截圖如下
我們可以看到,每一個段子都是
…包裹的內(nèi)容。現(xiàn)在我們想獲取發(fā)布人,發(fā)布日期,段子內(nèi)容,以及點贊的個數(shù)。不過另外注意的是,段子有些是帶圖片的,如果我們想在控制臺顯示圖片是不現(xiàn)實的,所以我們直接把帶有圖片的段子給它剔除掉,只保存僅含文本的段子。
所以我們加入如下正則表達式來匹配一下,用到的方法是 re.findall 是找尋所有匹配的內(nèi)容。方法的用法詳情可以看前面說的正則表達式的介紹。
好,我們的正則表達式匹配語句書寫如下,在原來的基礎(chǔ)上追加如下代碼
1
2
3
4
5
6
content=response.read().decode('utf-8')
pattern=re.compile('
.*?.*?(.*?).*?'="content".*?title="(.*?)">(.*?)
(.*?)總結(jié)
以上是生活随笔為你收集整理的python爬虫经典段子_Python爬虫实战(1):爬取糗事百科段子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: k8s pod之间不能通信_Kubern
- 下一篇: java生成数据插入hbase_hbas