国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Python實(shí)現(xiàn)爬取知乎神回復(fù)簡(jiǎn)單爬蟲(chóng)代碼分享

2019-11-25 18:02:48
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

看知乎的時(shí)候發(fā)現(xiàn)了一個(gè) “如何正確地吐槽” 收藏夾,里面的一些神回復(fù)實(shí)在很搞笑,但是一頁(yè)一頁(yè)地看又有點(diǎn)麻煩,而且每次都要打開(kāi)網(wǎng)頁(yè),于是想如果全部爬下來(lái)到一個(gè)文件里面,是不是看起來(lái)很爽,并且隨時(shí)可以看到全部的,于是就開(kāi)始動(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ú)法展開(kāi)(反正我不會(huì)。。),再說(shuō)答案不全的話(huà)爬來(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è)囍鴮?xiě)出python代碼:

復(fù)制代碼 代碼如下:

# -*- coding: cp936 -*-
import urllib2
from BeautifulSoup import BeautifulSoup

f = open('howtoTucao.txt','w')     #打開(kāi)文件

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)     #打開(kāi)網(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類(lèi)型,說(shuō)明是問(wèn)題
            print each.a.string     #問(wèn)題中還有一個(gè)<a..>,所以要each.a.string取出內(nèi)容
            if each.a.string:       #如果非空,才能寫(xiě)入
                f.write(each.a.string)
            else :                  #否則寫(xiě)"No Answer"
                f.write("No Answer")
        else :                      #如果是回答,同樣寫(xiě)入
            print each.string
            if each.string:
                f.write(each.string)
            else :
                f.write("No Answer")
f.close()                           #關(guān)閉文件

代碼雖然不常,可是寫(xiě)了我半天,開(kāi)始各種出問(wèn)題。

運(yùn)行

然后我們運(yùn)行就可以爬了:

結(jié)果

等運(yùn)行完畢,我們打開(kāi)文件howtoTucao.txt,可以看到,這樣就爬取成功了。只是格式可能還是有點(diǎn)問(wèn)題,原來(lái)是我No Answer沒(méi)加換行,所以No Answer還會(huì)混到文本里面去,加兩個(gè)換行就可以了。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 寻乌县| 彭山县| 客服| 搜索| 晋城| 阳新县| 静安区| 寿宁县| 乌拉特前旗| 安溪县| 犍为县| 左权县| 瓦房店市| 自治县| 清河县| 镇赉县| 黄龙县| 兴城市| 香河县| 安新县| 铜陵市| 江门市| 荣成市| 石家庄市| 龙里县| 龙海市| 丰城市| 襄樊市| 津市市| 玛多县| 阿城市| 东平县| 林西县| 孙吴县| 洮南市| 监利县| 高州市| 达拉特旗| 临西县| 安新县| 喀喇沁旗|