Python爬蟲入門 | 5 爬取小豬短租租房信息
小豬短租(成都)頁面:http://cd.xiaozhu.com/
1.爬取租房標題
按照慣例,先來爬下標題試試水,找到標題,復制xpath。
多復制幾個房屋的標題 xpath 進行對比:
//[@id="page_list"]/ul/li[1]/div[2]/div/a/span
//[@id="page_list"]/ul/li[2]/div[2]/div/a/span
//*[@id="page_list"]/ul/li[3]/div[2]/div/a/span
瞬間發現標題的 xpath 只在<li>後序號變化,於是,秒寫出爬取整頁標題的 xpath:
//*[@id=“page_list”]/ul/li/div[2]/div/a/span
還是固定的套路,讓我們嘗試把整頁的標題爬下來:
小豬在IP限制方面比較嚴格,代碼中務必要加入 sleep() 函數控制爬取的頻率
好了,再來對比下 xpath 信息:
順著標題的標簽網上找,找到整個房屋信息標簽, xpath 對比如下:
//[@id=“page_list”]/ul/li #整體
//[@id=“page_list”]/ul/li/div[2]/div/a/span #標題
你應該知道該怎麽來改代碼了吧,寫一個循環:
file=s.xpath(‘//*[@id=“page_list”]/ul/li’)
for div in file:
好了,來運行一下試試:
2.爬取多個元素的信息
對比其他元素的 xpath:
//[@id=“page_list”]/ul/li #整體
//[@id=“page_list”]/ul/li/div[2]/div/a/span #標題
//[@id=“page_list”]/ul/li/div[2]/span[1]/i #價格
//[@id=“page_list”]/ul/li/div[2]/div/em #描述
//*[@id=“page_list”]/ul/li/a/img #圖片
然後可以寫出代碼:
file=s.xpath(“//*[@id=“page_list”]/ul/li”)
title=div.xpath(“./div[2]/div/a/span/text()”)[0]
price=div.xpath(“./div[2]/span[1]/i/text()”)[0]
scrible=div.xpath(“./div[2]/div/em/text()”)[0].strip()
pic=div.xpath(“./a/img/@lazy_src”)[0]
來嘗試運行一下:
3.翻頁,爬取更多頁面
看一下翻頁時候 url 的變化:
http://cd.xiaozhu.com/search-duanzufang-p1-0/ #第一頁
http://cd.xiaozhu.com/search-duanzufang-p2-0/ #第二頁
http://cd.xiaozhu.com/search-duanzufang-p3-0/ #第三頁
http://cd.xiaozhu.com/search-duanzufang-p4-0/ #第四頁
……………………
url 變化的規律很簡單,只是 p 後面的數字不一樣而已,而且跟頁碼的序號是一模一樣的,這就很好辦了……寫一個簡單的循環來遍歷所有的url。
for a in range(1,6):
url = ‘http://cd.xiaozhu.com/search-duanzufang-p{}-0/’.format(a)
我們這裏嘗試5個頁面,你可以根據自己的需求來寫爬取的頁面數量
完整的代碼如下:
from lxml import etree
import requests
import time
for a in range(1,6):
url = ‘http://cd.xiaozhu.com/search-duanzufang-p{}-0/‘.format(a)
data = requests.get(url).text
s=etree.HTML(data)
file=s.xpath(‘//*[@id="page_list"]/ul/li‘)
time.sleep(3)
for div in file:
title=div.xpath("./div[2]/div/a/span/text()")[0]
price=div.xpath("./div[2]/span[1]/i/text()")[0]
scrible=div.xpath("./div[2]/div/em/text()")[0].strip()
pic=div.xpath("./a/img/@lazy_src")[0]
print("{} {} {} {}\n".format(title,price,scrible,pic))
看一下爬了5個頁面下來的效果:
相信你已經掌握爬蟲基本的套路了,但你還需要去不斷熟悉,能獨立寫出代碼為止。
寫代碼不僅要細心,也需要耐心。很多人從入門到放棄,並不是因為編程這件事情有多難,而是某次實踐過程中,遇到一個小問題。
好了,這節課就到這裏!這裏為大家準備的菜鳥學Python學習交流群:639584010,學習資料,答疑解惑與你共享。
Python爬蟲入門 | 5 爬取小豬短租租房信息