? ? ?python爬蟲(chóng)給我的感覺(jué)就是一個(gè)查找功能,網(wǎng)頁(yè)用html來(lái)寫(xiě)的一個(gè)腳本,spider就是在這里面抓取你想要的信息。
? ? ?這一章簡(jiǎn)單用爬蟲(chóng)實(shí)現(xiàn)抓取sina博客上的文章,并把它們的鏈接保存到本地(入門(mén),沒(méi)有用到ip代理、cookies、正則表達(dá)式等)。
? ? 準(zhǔn)備材料:Google chrome瀏覽器、python27,spyder(IDE)
1.分析網(wǎng)頁(yè)url
? ? ? ? 首先打開(kāi)韓寒的新浪微博:http://blog.sina.com.cn/twocold
? ? ? ? 我們想要抓取的是博客中的文章,因此找到博文目錄并點(diǎn)開(kāi):http://blog.sina.com.cn/s/articlelist_1191258123_0_1.html
看到如下的界面:

,現(xiàn)在,點(diǎn)擊鼠標(biāo)右鍵--審查元素 或者直接按下F12,打開(kāi)這張頁(yè)面的html

? ? ? 里面的內(nèi)容很多,我們想要找到其中的文章title,比如第一篇《論電影的七個(gè)元素》,此時(shí),通過(guò)ctrl+F打開(kāi)查找器,輸入‘論電影’,就可以找到它的位置啦~~

? ? ? 如上圖,我們可以看到 a title 、href等關(guān)鍵字,后面的就是該篇文章對(duì)于的鏈接了(不信可以自己復(fù)制鏈接打開(kāi)。。)。
2 .python代碼條件設(shè)置
? ? ? 我們已經(jīng)找到了一張html中的文章對(duì)應(yīng)的位置,那么接下來(lái)就可以通過(guò)代碼來(lái)實(shí)現(xiàn)了。
? ? ?首先通過(guò) import urllib加載urlopen的第三方庫(kù),
con=urllib.urlopen('http://blog.sina.com.cn/s/articlelist_1191258123_0_1.html').read()
? ? ? 這一行的目的是通過(guò)python把該網(wǎng)頁(yè)以html的形式讀到python中(可以同print con來(lái)查看讀取的內(nèi)容,和在瀏覽器中用F12打開(kāi)的內(nèi)容一致)
設(shè)置一個(gè)判斷條件,比如以一個(gè)開(kāi)頭和結(jié)尾作為提取文章對(duì)于鏈接的條件語(yǔ)句:

? ? ? url.find是一個(gè)字符串查找函數(shù),返回字符串第一個(gè)字符所在的索引,添加r表示為元字符,如果con中沒(méi)有對(duì)于的字符串,那么該函數(shù)返回-1.
? ? ? ?這時(shí),我們已經(jīng)找打了文章鏈接的在html中的索引,就可以把該文章對(duì)于的鏈接存放到一個(gè)list中,這里我用get_url=con[href+6:html+5]存放(此處加6和加5是因?yàn)閒ind函數(shù)只返回字符串第一個(gè)字符所在的位置,需要再往后移動(dòng)幾位)。至此,我們已經(jīng)把《論電影的七個(gè)元素》這篇文章的鏈接保存起來(lái)了,這時(shí)就需要保存到本地文件夾中,通過(guò)open函數(shù)保存:
open(r'blog_art/'+get_url[-26:],'w+').write(urllib.urlopen(get_url).read()) ??
? ? ? ?#這里表示打開(kāi)文件夾‘blog_art’,‘w+’表示如果沒(méi)有則新建,通過(guò)urlopen打開(kāi)這個(gè)網(wǎng)站的html,并把其中文章對(duì)應(yīng)的內(nèi)容保存,對(duì)應(yīng)的文件名為鏈接的后26個(gè)字符名字。
3.循環(huán)語(yǔ)句爬取整頁(yè)文章
? ? ? 上面只是簡(jiǎn)單的爬取了第一頁(yè)第一篇文章的內(nèi)容保存到本地,可以看到第一頁(yè)還有很多文章,我們這時(shí)通過(guò)循環(huán)語(yǔ)句來(lái)獲取:
? ? ? 首先,還是通過(guò)url.find來(lái)實(shí)現(xiàn),這個(gè)函數(shù)有一個(gè)功能就是它可以從指定位置開(kāi)始查找,比如我上一次查找了A的位置,那么我第二次想查找B可以從A的位置開(kāi)始查找。簡(jiǎn)單的說(shuō)就是一張html中,文章按一定順序排列的,我們找到了第一篇文章的索引位置,那么我們可以從這個(gè)索引往下找到第二篇文章:

? ? ? ?這里加了幾個(gè)判斷語(yǔ)句,就是title、href和html的查找不能為 空,這里i小于50是我大概看了韓寒老師的博客,一頁(yè)大概50篇吧(大家自己數(shù)數(shù)~)。
4.循環(huán)遍歷博客所有頁(yè)面的文章
? ? ? ? 上面只是完成了對(duì)第一頁(yè)文章的抓取,往后還有幾頁(yè),這時(shí)可以通過(guò)分析每一頁(yè)的鏈接的不同設(shè)置一個(gè)循環(huán)變量:
第一頁(yè):http://blog.sina.com.cn/s/articlelist_1191258123_0_1.html
第二頁(yè):http://blog.sina.com.cn/s/articlelist_1191258123_0_2.html
第三頁(yè):http://blog.sina.com.cn/s/articlelist_1191258123_0_3.html
這三頁(yè)鏈接已經(jīng)可以看出了這個(gè)變量,這里我們?cè)O(shè)置一個(gè)int變量page來(lái)控制循環(huán)(int和str不能直接相加,要通過(guò)str(page)這個(gè)函數(shù)來(lái)完成):

完整代碼和運(yùn)行結(jié)果,接下來(lái)讓我們驗(yàn)證結(jié)果,打開(kāi)***spider.py所在文件夾下的wenzhang_list這個(gè)文件夾看看結(jié)果:

這就是結(jié)果啦,打開(kāi)看看:

顯示的是本地文件~~~~。
至此,本章的爬蟲(chóng)入門(mén)就講完了,當(dāng)然這都是很簡(jiǎn)單的,我們往往不想保存html這樣的格式,比如做數(shù)據(jù)分析時(shí)往往想把爬取的數(shù)據(jù)存放到xls或者txt中,這就需要后期的正則表達(dá)式來(lái)進(jìn)一步提取內(nèi)容了;有些網(wǎng)站設(shè)置了障礙讓你不能通過(guò)spider爬取內(nèi)容,這時(shí)就需要用到agent。。。還有很多內(nèi)容,哈哈慢慢來(lái)