在之前的學習筆記3中,已經成功爬取了一個網頁的數據,但是我們往往爬取的內容并不僅僅是單個頁面的內容,而是一類所需內容,需要連續爬取多個頁面。那如何爬取多個頁面的內容呢?接著上一篇的內容,還是以爬取http://bj.xiaozhu.com上短租房的信息為例。
如果想連續爬取多個網頁的內容,我們需要得到2個信息:
1、每翻一頁時,網頁的網址鏈接
通過觀察http://bj.xiaozhu.com網頁,往下不斷翻頁時,可以發現各個網頁所對應的網頁名稱,如第2頁的網頁為:http://bj.xiaozhu.com/search-duanzufang-p2-0/,第3頁的網頁為http://bj.xiaozhu.com/search-duanzufang-p3-0/。因此可以推斷,網頁中P之后的數字就是控制翻頁時顯示網頁內容的關鍵信息。我們可以通過如下函數找出翻頁時網頁的網址:
urls = ['http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(number)fornumberinrange(1,10)]
這一段函數看似復雜,其實可以拆分為如下函數:
for number in range(1,10):#利用for循環,將1-9的數字放入number中
? ? ?urls ='http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(number)#取出1-9頁的網頁
再介紹一下以上函數涉及到的兩個函數:
range函數
函數語法:range(start,stop,step)
參數說明:
start: 計數從 start 開始。默認是從 0 開始。例如range(5)等價于range(0, 5);
stop: 計數到 stop 結束,但不包括 stop。例如:range(1, 5) 是[1, 2, 3, 4]沒有5
step:步長,默認為1。例如:range(0, 5) 等價于 range(0, 5, 1)
str.format()函數
Python2.6 開始,新增了一種格式化字符串的函數str.format(),它增強了字符串格式化的功能。
函數語法:通過{}來代替以前的%。
format 函數可以接受不限個參數,位置可以不按順序。
例如:
"{} {}".format("hello", "world") # 不設置指定位置,輸出為: 'hello world'
?"{0} {1}".format("hello", "world") # 設置指定位置,輸出為: 'hello world'
?"{1} {0} {1}".format("hello", "world") # 設置指定位置,輸出為: 'world hello world'
以上函數,即是尋找1-9頁網頁的站址。輸出內容如下:
2、從以上單個網址中,尋找具體商家的網址鏈接
在以上http://bj.xiaozhu.com/search-duanzufang-p1-0/、http://bj.xiaozhu.com/search-duanzufang-p2-0/的鏈接中,包含了許多商家的信息,通過尋找商家信息在單個網址中的鏈接,進一步找到具體的網址鏈接。代碼如下:
urls = ['http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(number) for number in range(1, 10)]
for single_url in urls:#通過for循環,將翻頁的單獨網頁存入single_url中
? ? ? url = single_url
#----------------------------------獲取翻頁時的網頁網址----------------------------------------------
wb_data = requests.get(url)#向網頁發送請求
Soup = BeautifulSoup(wb_data.text,'lxml')#解析網頁
links = Soup.select('#page_list > ul > li > a')#獲取商家信息
for link in links:#將抓取的商家信息通過for循環,放入link中
? ? ?href = link.get('href')#抓取link中的商家網址鏈接
? ? ?print(href)#輸出商家網址鏈接
#---------------------------------尋找具體商家的網址鏈接--------------------------------------------
輸出結果如下:
在完成以上兩步之后,便能自動獲得我們需要批量爬取的網頁信息,最后放入python學習筆記3 的代碼中,就可以開始連續爬取多個網頁的信息。全部的代碼如下:
最終輸出結果為: