Python實(shí)現(xiàn)爬取知乎神回復(fù)簡(jiǎn)單爬蟲代碼分享
看知乎的時(shí)候發(fā)現(xiàn)了一個(gè) “如何正確地吐槽” 收藏夾,里面的一些神回復(fù)實(shí)在很搞笑,但是一頁(yè)一頁(yè)地看又有點(diǎn)麻煩,而且每次都要打開網(wǎng)頁(yè),于是想如果全部爬下來(lái)到一個(gè)文件里面,是不是看起來(lái)很爽,并且隨時(shí)可以看到全部的,于是就開始動(dòng)手了。
工具
1.Python 2.7
2.BeautifulSoup
分析網(wǎng)頁(yè)
我們先來(lái)看看知乎上該網(wǎng)頁(yè)的情況
網(wǎng)址:,容易看到,網(wǎng)址是有規(guī)律的,page慢慢遞增,這樣就能夠?qū)崿F(xiàn)全部爬取了。
再來(lái)看一下我們要爬取的內(nèi)容:
我們要爬取兩個(gè)內(nèi)容:?jiǎn)栴}和回答,回答僅限于顯示了全部?jī)?nèi)容的回答,如下面這種就不能爬取,因?yàn)楹孟駸o(wú)法展開(反正我不會(huì)。。),再說(shuō)答案不全的話爬來(lái)也沒(méi)用,所以就不爬答案不全的了吧。
好,那么下面我們要找到他們?cè)诰W(wǎng)頁(yè)源代碼中的位置:
即我們找到問(wèn)題的內(nèi)容包含在<h2 class = "zm-item-title"><a tar...>中,那么我們等會(huì)就可以在這個(gè)標(biāo)簽里面找問(wèn)題。
然后是回復(fù):
有兩個(gè)地方都有回復(fù)的內(nèi)容,因?yàn)樯厦婺莻€(gè)的內(nèi)容還包括了<span..>等一些內(nèi)容,不方便處理,我們爬下面那個(gè)的內(nèi)容,因?yàn)槟莻€(gè)里面的內(nèi)容純正無(wú)污染。
代碼
好,這時(shí)候我們?cè)囍鴮懗鰌ython代碼:
# -*- coding: cp936 -*-
import urllib2
from BeautifulSoup import BeautifulSoup
f = open('howtoTucao.txt','w') #打開文件
for pagenum in range(1,21): #從第1頁(yè)爬到第20頁(yè)
strpagenum = str(pagenum) #頁(yè)數(shù)的str表示
print "Getting data for Page " + strpagenum #shell里面顯示的,表示已爬到多少頁(yè)
url = " #網(wǎng)址
page = urllib2.urlopen(url) #打開網(wǎng)頁(yè)
soup = BeautifulSoup(page) #用BeautifulSoup解析網(wǎng)頁(yè)
#找到具有class屬性為下面兩個(gè)的所有Tag
ALL = soup.findAll(attrs = {'class' : ['zm-item-title','zh-summary summary clearfix'] })
for each in ALL : #枚舉所有的問(wèn)題和回答
#print type(each.string)
#print each.name
if each.name == 'h2' : #如果Tag為h2類型,說(shuō)明是問(wèn)題
print each.a.string #問(wèn)題中還有一個(gè)<a..>,所以要each.a.string取出內(nèi)容
if each.a.string: #如果非空,才能寫入
f.write(each.a.string)
else : #否則寫"No Answer"
f.write("No Answer")
else : #如果是回答,同樣寫入
print each.string
if each.string:
f.write(each.string)
else :
f.write("No Answer")
f.close() #關(guān)閉文件
代碼雖然不常,可是寫了我半天,開始各種出問(wèn)題。
運(yùn)行
然后我們運(yùn)行就可以爬了:
結(jié)果
等運(yùn)行完畢,我們打開文件howtoTucao.txt,可以看到,這樣就爬取成功了。只是格式可能還是有點(diǎn)問(wèn)題,原來(lái)是我No Answer沒(méi)加換行,所以No Answer還會(huì)混到文本里面去,加兩個(gè)換行就可以了。
相關(guān)文章
python+pyqt實(shí)現(xiàn)右下角彈出框
這篇文章主要為大家詳細(xì)介紹了python+pyqt實(shí)現(xiàn)右下角彈出框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10使用Django連接Mysql數(shù)據(jù)庫(kù)步驟
今天小編就為大家分享一篇關(guān)于使用Django連接Mysql數(shù)據(jù)庫(kù)步驟,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01python關(guān)于excel多個(gè)sheet的導(dǎo)入導(dǎo)出方式
這篇文章主要介紹了python關(guān)于excel多個(gè)sheet的導(dǎo)入導(dǎo)出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12python使用threading.Condition交替打印兩個(gè)字符
這篇文章主要為大家詳細(xì)介紹了python使用threading.Condition交替打印兩個(gè)字符,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05python數(shù)據(jù)挖掘需要學(xué)的內(nèi)容
在本篇文章中我們給大家整理了關(guān)于python數(shù)據(jù)挖掘需要學(xué)什么的知識(shí)點(diǎn)指南,有興趣的朋友們跟著參考下。2019-06-06