前言Python 非常適合用來(lái)開(kāi)發(fā)網(wǎng)頁(yè)爬蟲(chóng),理由如下: 1,、抓取網(wǎng)頁(yè)本身的接口 相比與其他靜態(tài)編程語(yǔ)言,,如 java , c#,, c ++,, python 抓取網(wǎng)頁(yè)文檔的接口更簡(jiǎn)潔;相比其他動(dòng)態(tài)腳本語(yǔ)言,,如 perl ,, shell ,, python 的 urllib 包提供了較為完整的訪問(wèn)網(wǎng)頁(yè)文檔的 API 。(當(dāng)然 ruby 也是很好的選擇) 此外,,抓取網(wǎng)頁(yè)有時(shí)候需要模擬瀏覽器的行為,,很多網(wǎng)站對(duì)于生硬的爬蟲(chóng)抓取都是封殺的。這是我們需要模擬 user agent的行為構(gòu)造合適的請(qǐng)求,,譬如模擬用戶登陸,、模擬session/cookie的存儲(chǔ)和設(shè)置。在python里都有非常優(yōu)秀的第三方包幫你搞定,,如Requests,,mechanize。 2,、網(wǎng)頁(yè)抓取后的處理 抓取的網(wǎng)頁(yè)通常需要處理,,比如過(guò)濾 html 標(biāo)簽,提取文本等,。 python 的 beautifulsoap 提供了簡(jiǎn)潔的文檔處理功能,,能用極短的代碼完成大部分文檔的處理。 其實(shí)以上功能很多語(yǔ)言和工具都能做,,但是用 python 能夠干得最快,,最干凈。
爬蟲(chóng)架構(gòu)架構(gòu)組成URL 管理器:管理待爬取的 url 集合和已爬取的 url 集合,傳送待爬取的 url 給網(wǎng)頁(yè)下載器,。 網(wǎng)頁(yè)下載器( urllib ):爬取 url 對(duì)應(yīng)的網(wǎng)頁(yè),,存儲(chǔ)成字符串,傳送給網(wǎng)頁(yè)解析器,。 網(wǎng)頁(yè)解析器( BeautifulSoup ):解析出有價(jià)值的數(shù)據(jù),,存儲(chǔ)下來(lái),,同時(shí)補(bǔ)充 url 到 URL 管理器,。 運(yùn)行流程URL 管理器基本功能
存儲(chǔ)方式1,、內(nèi)存( python 內(nèi)存) 待爬取 url 集合:set() 已爬取 url 集合:set() 2、關(guān)系數(shù)據(jù)庫(kù)( mysql ) urls( url , is_crawled) 3,、緩存( redis ) 待爬取 url 集合: set() 已爬取 url 集合: set() 大型互聯(lián)網(wǎng)公司,,由于緩存數(shù)據(jù)庫(kù)的高性能,,一般把 url 存儲(chǔ)在緩存數(shù)據(jù)庫(kù)中。小型公司,,一般把 url 存儲(chǔ)在內(nèi)存中,,如果想要永久存儲(chǔ),則存儲(chǔ)到關(guān)系數(shù)據(jù)庫(kù)中,。 網(wǎng)頁(yè)下載器( urllib )將 url 對(duì)應(yīng)的網(wǎng)頁(yè)下載到本地,,存儲(chǔ)成一個(gè)文件或字符串。 基本方法新建 baidu.py ,,內(nèi)容如下:
命令行中執(zhí)行 構(gòu)造 Request上面的代碼,,可以修改為:
攜帶參數(shù)新建 baidu 2. py ,,內(nèi)容如下:
使用 Fiddler 監(jiān)聽(tīng)數(shù)據(jù)我們想要查看一下,我們的請(qǐng)求是否真的攜帶了參數(shù),,所以需要使用 fiddler ,。 打開(kāi) fiddler 之后,卻意外發(fā)現(xiàn),,上面的代碼會(huì)報(bào)錯(cuò)504,,無(wú)論是 baidu.py 還是 baidu 2. py 。 雖然 python 有報(bào)錯(cuò),,但是在 fiddler 中,,我們可以看到請(qǐng)求信息,確實(shí)攜帶了參數(shù),。 經(jīng)過(guò)查找資料,,發(fā)現(xiàn)python以前版本的Request都不支持代理環(huán)境下訪問(wèn)https。但是,,最近的版本應(yīng)該支持了才對(duì),。那么,最簡(jiǎn)單的辦法,,就是換一個(gè)使用http協(xié)議的url來(lái)爬取,,比如,換成 然而,,然而,然而。,。,。神轉(zhuǎn)折出現(xiàn)了!??! 當(dāng)我把url換成 添加處理器
網(wǎng)頁(yè)解析器( BeautifulSoup )從網(wǎng)頁(yè)中提取出有價(jià)值的數(shù)據(jù)和新的 url 列表,。 解析器選擇為了實(shí)現(xiàn)解析器,,可以選擇使用正則表達(dá)式、 html.parser ,、 BeautifulSoup ,、 lxml 等,這里我們選擇 BeautifulSoup ,。 其中,,正則表達(dá)式基于模糊匹配,而另外三種則是基于 DOM 結(jié)構(gòu)化解析,。 BeautifulSoup安裝測(cè)試1,、安裝,在命令行下執(zhí)行
使用說(shuō)明基本用法1、創(chuàng)建 BeautifulSoup 對(duì)象
2,、訪問(wèn)節(jié)點(diǎn)
3,、指定 tag 、 class 或 id
4,、從文檔中找到所有
出現(xiàn)了警告,,根據(jù)提示,我們?cè)趧?chuàng)建 BeautifulSoup 對(duì)象時(shí),,指定解析器即可。
5、從文檔中獲取所有文字內(nèi)容
6,、正則匹配
后記python 爬蟲(chóng)基礎(chǔ)知識(shí),,至此足夠,接下來(lái),,在實(shí)戰(zhàn)中學(xué)習(xí)更高級(jí)的知識(shí),。 題圖:pexels,CC0 授權(quán),。
|
|