Python黑客怎么打造快速編寫(xiě)信息收集器

這篇文章將為大家詳細(xì)講解有關(guān)Python黑客怎么打造快速編寫(xiě)信息收集器,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)公司:成立于2013年為各行業(yè)開(kāi)拓出企業(yè)自己的“網(wǎng)站建設(shè)”服務(wù),為1000多家公司企業(yè)提供了專(zhuān)業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)和網(wǎng)站推廣服務(wù), 專(zhuān)業(yè)公司由設(shè)計(jì)師親自精心設(shè)計(jì),設(shè)計(jì)的效果完全按照客戶的要求,并適當(dāng)?shù)奶岢龊侠淼慕ㄗh,擁有的視覺(jué)效果,策劃師分析客戶的同行競(jìng)爭(zhēng)對(duì)手,根據(jù)客戶的實(shí)際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領(lǐng)先地位的。

環(huán)境:
Python 3
模塊:
Lxml
Request
Beautifulsoup
開(kāi)始:
首先看一下目標(biāo)站:

http://gaokao.chsi.com.cn/gkxx/zszcgd/dnzszc/201706/20170615/1611254988-1.html


Python黑客怎么打造快速編寫(xiě)信息收集器

這里有一個(gè)目錄:我們點(diǎn)擊第一個(gè)北京市,就可以看到其中的表格,和北京市所有的大學(xué)名字

我們的目標(biāo)就是吧每一個(gè)城市的所有大學(xué),分別放在不同的txt文本中。

Python黑客怎么打造快速編寫(xiě)信息收集器

正式開(kāi)始分析:

我們審查元素,我們要取的目標(biāo)為學(xué)校名稱(chēng)Python黑客怎么打造快速編寫(xiě)信息收集器

可以清晰的看到網(wǎng)頁(yè)的結(jié)構(gòu),我們要取的目標(biāo)在一個(gè)tbodyz中,并在一個(gè)tr標(biāo)簽內(nèi)。繼續(xù)分析下一個(gè)名字找到他們的規(guī)律

Python黑客怎么打造快速編寫(xiě)信息收集器

可以看到每個(gè)名字都在一個(gè)單獨(dú)的tr標(biāo)簽中。

好我們?cè)诳匆幌逻@個(gè)北京市的url和第二個(gè)城市網(wǎng)頁(yè)對(duì)應(yīng)的url。

http://gaokao.chsi.com.cn/gkxx/zszcgd/dnzszc/201706/20170615/1611254988-2.html

http://gaokao.chsi.com.cn/gkxx/zszcgd/dnzszc/201706/20170615/1611254988-3.html

可以看到最后的數(shù)字不同,從二開(kāi)始。依次增加。好我們已經(jīng)基本獲得了目標(biāo)的信息,下面我們開(kāi)始激動(dòng)人心的敲代碼。

我們先從一頁(yè)開(kāi)始。

#coding=utf-8import requestsimport lxmlfrom bs4 import BeautifulSoup as bs #導(dǎo)入我們的BF,并且命名為bs,名字太長(zhǎng)了偷個(gè)懶。def school(): #定義一個(gè)函數(shù)        url="http://gaokao.chsi.com.cn/gkxx/zszcgd/dnzszc/201706/20170615/1611254988-2.html"        r=requests.get(url=url) #利用requests請(qǐng)求我們的目標(biāo)網(wǎng)站。        soup=bs(r.content,"lxml")#利用beautifulsoup解析,將返回內(nèi)容賦值給soup        print (soup)       #打印出內(nèi)容。if __name__ == '__main__':  #程序開(kāi)始運(yùn)行的地方,需要調(diào)用剛才設(shè)置的函數(shù),不然程序是不會(huì)運(yùn)行的。    school()

寫(xiě)完之后點(diǎn)一下運(yùn)行,成功返回發(fā)現(xiàn)并不需要設(shè)置頭信息。省去了一些麻煩。

Python黑客怎么打造快速編寫(xiě)信息收集器

現(xiàn)在我們開(kāi)始取內(nèi)容:

我們的內(nèi)容在<tr height=”29”>這個(gè)標(biāo)簽中,我們以這個(gè)標(biāo)簽為標(biāo)準(zhǔn),查找所有的這個(gè)標(biāo)簽中的內(nèi)容。代碼是這樣的。運(yùn)行

def school():      url="http://gaokao.chsi.com.cn/gkxx/zszcgd/dnzszc/201706/20170615/1611254988-2.html"

r=requests.get(url=url)

soup=bs(r.content,"lxml")     content=soup.find_all(name="tr",attrs={"height":"29"})

print(content)

Python黑客怎么打造快速編寫(xiě)信息收集器Ok 成功返回了我們需要的東西,但是有很多其他沒(méi)有用的選項(xiàng),現(xiàn)在我們要去掉這些東西。繼續(xù)編輯school函數(shù)。我們需要用循環(huán)遍歷我們的取出的內(nèi)容。讓每一個(gè)tr標(biāo)簽中的內(nèi)容作為一個(gè)獨(dú)立的列表,然后利用find_all方法找出而每一個(gè)td標(biāo)簽為list中的內(nèi)容,方便我們?nèi)?shù)。學(xué)校名稱(chēng)位于第二個(gè)td標(biāo)簽中,在list中的位置則為1.代碼如下。

def school():        url="http://gaokao.chsi.com.cn/gkxx/zszcgd/dnzszc/201706/20170615/1611254988-2.html"        r=requests.get(url=url)        soup=bs(r.content,"lxml")        content=soup.find_all(name="tr",attrs={"height":"29"})
        for content1 in content:
            soup_content=bs(str(content1),"lxml")
            soup_content1=soup_content.find_all(name="td")
            print(soup_content1[1])


Python黑客怎么打造快速編寫(xiě)信息收集器

加好之后我們運(yùn)行代碼。發(fā)現(xiàn)報(bào)錯(cuò)了,不慌我們看一下報(bào)錯(cuò)的內(nèi)容

報(bào)錯(cuò)大意為列出索引超出范圍。但是我們發(fā)現(xiàn)還是成功返回了一個(gè)內(nèi)容,我們?cè)偃シ治鲆幌戮W(wǎng)頁(yè)源代碼。

Python黑客怎么打造快速編寫(xiě)信息收集器

可以看到前三個(gè)tr標(biāo)簽,我們成功的取到了第一個(gè)tr標(biāo)簽中的”學(xué)校名稱(chēng)”這行的內(nèi)容,然后第二個(gè)tr報(bào)錯(cuò)。我們的代碼打印的的是list的第二個(gè)內(nèi)容,但是在第二個(gè)tr標(biāo)簽中只有一個(gè)內(nèi)容。然后剩下的都恢復(fù)了正常,我們?cè)趺唇鉀Q這個(gè)問(wèn)題呢。可以用python的異常處理。當(dāng)他報(bào)錯(cuò)時(shí),然后忽略錯(cuò)誤繼續(xù)運(yùn)行。把代碼變成這樣。

def school():        url="http://gaokao.chsi.com.cn/gkxx/zszcgd/dnzszc/201706/20170615/1611254988-2.html"        r=requests.get(url=url) 
        soup=bs(r.content,"lxml")
        content=soup.find_all(name="tr",attrs={"height":"29"})
        for content1 in content:
            try:               soup_content=bs(str(content1),"lxml")                soup_content1=soup_content.find_all(name="td")
                print(soup_content1[1])
            except IndexError:
                pass

再次運(yùn)行。

Python黑客怎么打造快速編寫(xiě)信息收集器

成功了,但這只是一個(gè)城市,我們還需要其他的。接下來(lái)我們需要用一個(gè)for循環(huán),從2到33,每次加1,并修改url中的控制頁(yè)面的參數(shù)中。

#coding=utf-8import requestsimport lxmlfrom bs4 import BeautifulSoup as bs 
def school():     for i in range(2,34,1):
        url="http://gaokao.chsi.com.cn/gkxx/zszcgd/dnzszc/201706/20170615/1611254988-%s.html"%(str(i))
        r=requests.get(url=url)
        soup=bs(r.content,"lxml")
        content=soup.find_all(name="tr",attrs={"height":"29"})
        for content1 in content:
            try:
                soup_content=bs(str(content1),"lxml")
                soup_content1=soup_content.find_all(name="td")
                print(soup_content1[1])
            except IndexError:
                passif __name__ == '__main__': 
    school()


Python黑客怎么打造快速編寫(xiě)信息收集器

我們可以看到不僅有北京的學(xué)校,還有天津的,當(dāng)然下面所有的學(xué)校都打印出來(lái)了。我們還要去掉標(biāo)簽。修改打印為如下代碼,這樣就只會(huì)看到文本。

print(soup_content1[1].string)

主要功能就寫(xiě)完了,我們還需要,將他們分別存放在不同的文件夾內(nèi)并保持為特定的文件名,當(dāng)然我們不可能手動(dòng)輸入每個(gè)城市的名字。還記的我們剛才報(bào)錯(cuò)的地方嗎,那個(gè)地方剛剛好有我們要的城市名稱(chēng)。理一下思路,我們首先從網(wǎng)頁(yè)中取出城市名稱(chēng),并新建一個(gè)對(duì)應(yīng)城市名稱(chēng)的TXT文本,然后把我們?nèi)〉玫膬?nèi)容分別放入不同的文件內(nèi)。為了防止報(bào)錯(cuò)停止,我們?cè)偌右粋€(gè)異常處理好讓我們繼續(xù)把我們的代碼寫(xiě)完。

def school():    for i in range(2,34,1):
        try:
            url="http://gaokao.chsi.com.cn/gkxx/zszcgd/dnzszc/201706/20170615/1611254988-%s.html"%(str(i))
            r=requests.get(url=url)
            soup=bs(r.content,"lxml")
            content2=soup.find_all(name="td",attrs={"colspan":"7"})[0].string
            f1=open("%s.txt"%(content2),"w")
            content=soup.find_all(name="tr",attrs={"height":"29"})
            for content1 in content:
                try:
                    soup_content=bs(str(content1),"lxml")
                    soup_content1=soup_content.find_all(name="td")
                    f1.write(soup_content1[1].string+"/n")
                    print(soup_content1[1].string)
                except IndexError:
                    pass        except IndexError:
            pass


Python黑客怎么打造快速編寫(xiě)信息收集器完整代碼:

#coding=utf-8import requestsimport lxmlfrom bs4 import BeautifulSoup as bsdef school():    for i in range(2,34,1):
        try:
            url="http://gaokao.chsi.com.cn/gkxx/zszcgd/dnzszc/201706/20170615/1611254988-%s.html"%(str(i))
            r=requests.get(url=url)
            soup=bs(r.content,"lxml")
            content2=soup.find_all(name="td",attrs={"colspan":"7"})[0].string
            f1=open("%s.txt"%(content2),"w")
            content=soup.find_all(name="tr",attrs={"height":"29"})
            for content1 in content:
                try:
                    soup_content=bs(str(content1),"lxml")
                    soup_content1=soup_content.find_all(name="td")
                    f1.write(soup_content1[1].string+"/n")
                    print(soup_content1[1].string)
                except IndexError:
                    pass        except IndexError:
            passif __name__ == '__main__':
    school()

總結(jié):
這個(gè)程序的難度并不大,也沒(méi)有用什么多線程,類(lèi),非常的簡(jiǎn)單,并不一定是代碼越多的程序越好,有的時(shí)候我們只是想快速的完成我們的要實(shí)現(xiàn)的目標(biāo),這時(shí)候代碼就要越簡(jiǎn)潔越好。希望可以給初學(xué)者一些好的學(xué)習(xí)思路,最后我之所以要再加一個(gè)異常處理,是因?yàn)橛殖霈F(xiàn)了一個(gè)和上面一樣的報(bào)錯(cuò),而為了快速實(shí)現(xiàn)我們的目標(biāo),我直接嘗試添加一個(gè)異常處理,程序正常運(yùn)行。

關(guān)于Python黑客怎么打造快速編寫(xiě)信息收集器就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

文章標(biāo)題:Python黑客怎么打造快速編寫(xiě)信息收集器
文章位置:http://bm7419.com/article4/pcoeoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、定制開(kāi)發(fā)、關(guān)鍵詞優(yōu)化、自適應(yīng)網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名