利用python寫一個爬蟲,爬取百度百科的某一個詞條下面的全部鏈接和每一個鏈接內(nèi)部的詞條主題和摘要。利用request庫爬取頁面,然后利用BeautifulSoup對爬取到的頁面提取url和關(guān)鍵內(nèi)容。使用一個類來管理url,使爬取到的url不會被重新爬取。遍歷url的時候,將每個url指向的html頁面爬取下來,提取出感興趣的文本,保存到文件。最后生成一個某一個詞條下面的包含的所有詞條和摘要的文件。
用到的Python的庫:
1. urllib.request
2.BeautifulSoup
關(guān)于urllib.request
urllib.request 是python 3 下面的一個庫,不支持python2,(python2的是requests庫),本來是想用requests的,但是python的中文編碼問題一直沒有解決,但好想問題已經(jīng)找到了,就是抓取到的網(wǎng)頁的內(nèi)容編碼是ios-8859-1,但是網(wǎng)頁的response頭部的編碼是utf-8,導(dǎo)致編碼不統(tǒng)一,造成亂碼。解決方案,在另外的一遍文章討論。總之就是,用了這個urllib.request庫,當(dāng)然源代碼里面也有使用requests庫,造成亂碼的源碼。這是關(guān)于亂碼的分析的文章http://www.lxweimin.com/p/f819ab06a53a。
關(guān)于BeautifulSoup
BeautifulSoup是一個神器啊,將抓取到的html,轉(zhuǎn)換為一顆dom樹,可以通過很簡單的語法,來訪問特定的標(biāo)簽和標(biāo)簽下面的屬性。而且還支持正則表達(dá)式。
源碼的思路分析:
源碼包括5個文件,main.py , HtmlParse.py,UrlManage.py,html_outputer.py,html_download2.py
main.py 是程序的入口
HtmlParse.py,UrlManage.py,html_outputer.py,html_download2.py 每一個文件對應(yīng)一個類,他們分別的功能是
UrlManage.py 負(fù)責(zé)url管理,這個類下面的數(shù)據(jù)成員是 old_urlset 和new_urlset,分別表示已經(jīng)爬取的頁面,和沒有爬取的頁面。
html_download2.py 負(fù)責(zé)將網(wǎng)頁下載下來(這里很容易出現(xiàn)下載下來的網(wǎng)頁是亂碼的問題,以后慢慢討論這個問題)
HtmlParse.py 負(fù)責(zé)將爬取下來的網(wǎng)頁做分析。利用BeautifulSoup,提取網(wǎng)頁的詞條主題和里面沒包含的url
html_outputer.py 負(fù)責(zé)將分析之后得到的詞條主題寫到文件里面。
程序的目錄:
輸出文件是output.txt, 程序運(yùn)行結(jié)果:
shell的運(yùn)行結(jié)果:
通過main.py 頁面里面count 變量設(shè)置爬取的頁面數(shù),比如100條
源代碼鏈接:
https://github.com/zhaozhengcoder/Spider
?
參考教程:
廖雪峰的python教程http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
靜覓的python教程
http://cuiqingcai.com/category/technique/python
BeautifulSoup官方的文檔
requests庫的官方文檔