Python學(xué)習(xí)筆記3.1——第一次爬蟲的補(bǔ)充

在之前的學(xué)習(xí)筆記3中,已經(jīng)成功爬取了一個(gè)網(wǎng)頁(yè)的數(shù)據(jù),但是我們往往爬取的內(nèi)容并不僅僅是單個(gè)頁(yè)面的內(nèi)容,而是一類所需內(nèi)容,需要連續(xù)爬取多個(gè)頁(yè)面。那如何爬取多個(gè)頁(yè)面的內(nèi)容呢?接著上一篇的內(nèi)容,還是以爬取http://bj.xiaozhu.com上短租房的信息為例。

如果想連續(xù)爬取多個(gè)網(wǎng)頁(yè)的內(nèi)容,我們需要得到2個(gè)信息:

1、每翻一頁(yè)時(shí),網(wǎng)頁(yè)的網(wǎng)址鏈接

通過觀察http://bj.xiaozhu.com網(wǎng)頁(yè),往下不斷翻頁(yè)時(shí),可以發(fā)現(xiàn)各個(gè)網(wǎng)頁(yè)所對(duì)應(yīng)的網(wǎng)頁(yè)名稱,如第2頁(yè)的網(wǎng)頁(yè)為:http://bj.xiaozhu.com/search-duanzufang-p2-0/,第3頁(yè)的網(wǎng)頁(yè)為http://bj.xiaozhu.com/search-duanzufang-p3-0/。因此可以推斷,網(wǎng)頁(yè)中P之后的數(shù)字就是控制翻頁(yè)時(shí)顯示網(wǎng)頁(yè)內(nèi)容的關(guān)鍵信息。我們可以通過如下函數(shù)找出翻頁(yè)時(shí)網(wǎng)頁(yè)的網(wǎng)址:

urls = ['http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(number)fornumberinrange(1,10)]

這一段函數(shù)看似復(fù)雜,其實(shí)可以拆分為如下函數(shù):

for number in range(1,10):#利用for循環(huán),將1-9的數(shù)字放入number中

? ? ?urls ='http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(number)#取出1-9頁(yè)的網(wǎng)頁(yè)

再介紹一下以上函數(shù)涉及到的兩個(gè)函數(shù):

range函數(shù)

函數(shù)語法:range(start,stop,step)

參數(shù)說明:

start: 計(jì)數(shù)從 start 開始。默認(rèn)是從 0 開始。例如range(5)等價(jià)于range(0, 5);

stop: 計(jì)數(shù)到 stop 結(jié)束,但不包括 stop。例如:range(1, 5) 是[1, 2, 3, 4]沒有5

step:步長(zhǎng),默認(rèn)為1。例如:range(0, 5) 等價(jià)于 range(0, 5, 1)

str.format()函數(shù)

Python2.6 開始,新增了一種格式化字符串的函數(shù)str.format(),它增強(qiáng)了字符串格式化的功能。

函數(shù)語法:通過{}來代替以前的%。

format 函數(shù)可以接受不限個(gè)參數(shù),位置可以不按順序。

例如:

"{} {}".format("hello", "world") # 不設(shè)置指定位置,輸出為: 'hello world'

?"{0} {1}".format("hello", "world") # 設(shè)置指定位置,輸出為: 'hello world'

?"{1} {0} {1}".format("hello", "world") # 設(shè)置指定位置,輸出為: 'world hello world'

以上函數(shù),即是尋找1-9頁(yè)網(wǎng)頁(yè)的站址。輸出內(nèi)容如下:

2、從以上單個(gè)網(wǎng)址中,尋找具體商家的網(wǎng)址鏈接

在以上http://bj.xiaozhu.com/search-duanzufang-p1-0/、http://bj.xiaozhu.com/search-duanzufang-p2-0/的鏈接中,包含了許多商家的信息,通過尋找商家信息在單個(gè)網(wǎng)址中的鏈接,進(jìn)一步找到具體的網(wǎng)址鏈接。代碼如下:

urls = ['http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(number) for number in range(1, 10)]

for single_url in urls:#通過for循環(huán),將翻頁(yè)的單獨(dú)網(wǎng)頁(yè)存入single_url中

? ? ? url = single_url

#----------------------------------獲取翻頁(yè)時(shí)的網(wǎng)頁(yè)網(wǎng)址----------------------------------------------

wb_data = requests.get(url)#向網(wǎng)頁(yè)發(fā)送請(qǐng)求

Soup = BeautifulSoup(wb_data.text,'lxml')#解析網(wǎng)頁(yè)

links = Soup.select('#page_list > ul > li > a')#獲取商家信息

for link in links:#將抓取的商家信息通過for循環(huán),放入link中

? ? ?href = link.get('href')#抓取link中的商家網(wǎng)址鏈接

? ? ?print(href)#輸出商家網(wǎng)址鏈接

#---------------------------------尋找具體商家的網(wǎng)址鏈接--------------------------------------------

輸出結(jié)果如下:

在完成以上兩步之后,便能自動(dòng)獲得我們需要批量爬取的網(wǎng)頁(yè)信息,最后放入python學(xué)習(xí)筆記3 的代碼中,就可以開始連續(xù)爬取多個(gè)網(wǎng)頁(yè)的信息。全部的代碼如下:

最終輸出結(jié)果為:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,628評(píng)論 19 139
  • //Clojure入門教程: Clojure – Functional Programming for the J...
    葡萄喃喃囈語閱讀 4,053評(píng)論 0 7
  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫完項(xiàng)目接著寫寫一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,806評(píng)論 1 118
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,358評(píng)論 0 17
  • 都過去了 徐家興 1 都過去了 還留戀什么 還有什么可留戀的啊 積雪已融化 我站在冬的盡頭 燃著爆竹 想提前驚醒果...
    赤腳老怪閱讀 250評(píng)論 2 2

友情鏈接更多精彩內(nèi)容