小豬短租是一個(gè)租房網(wǎng)站,上面有很多優(yōu)質(zhì)的民宿出租信息,下面我們以成都地區(qū)的租房信息為例,來嘗試爬取這些數(shù)據(jù)。
小豬短租(成都)頁面:http://cd.xiaozhu.com/

?
1.爬取租房標(biāo)題
按照慣例,先來爬下標(biāo)題試試水,找到標(biāo)題,復(fù)制xpath。

?
多復(fù)制幾個(gè)房屋的標(biāo)題 xpath 進(jìn)行對比:
//*[@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
瞬間發(fā)現(xiàn)標(biāo)題的 xpath 只在<li>后序號(hào)變化,于是,秒寫出爬取整頁標(biāo)題的 xpath:
//*[@id=“page_list”]/ul/li/div[2]/div/a/span
?
還是固定的套路,讓我們嘗試把整頁的標(biāo)題爬下來:

小豬在IP限制方面比較嚴(yán)格,代碼中務(wù)必要加入 sleep() 函數(shù)控制爬取的頻率
?
好了,再來對比下 xpath 信息

順著標(biāo)題的標(biāo)簽網(wǎng)上找,找到整個(gè)房屋信息標(biāo)簽, xpath 對比如下:
//*[@id=“page_list”]/ul/li #整體
//*[@id=“page_list”]/ul/li/div[2]/div/a/span #標(biāo)題
?
你應(yīng)該知道該怎么來改代碼了吧,寫一個(gè)循環(huán):
file=s.xpath(‘//*[@id=“page_list”]/ul/li’)
for div in file:
title=div.xpath("./div[2]/div/a/span/text()")[0]
?
好了,來運(yùn)行一下試試:

?
2.爬取多個(gè)元素的信息
對比其他元素的 xpath:
//*[@id=“page_list”]/ul/li #整體
//*[@id=“page_list”]/ul/li/div[2]/div/a/span #標(biāo)題
//*[@id=“page_list”]/ul/li/div[2]/span[1]/i #價(jià)格
//*[@id=“page_list”]/ul/li/div[2]/div/em #描述
//*[@id=“page_list”]/ul/li/a/img #圖片
?
然后可以寫出代碼:
file=s.xpath(“//*[@id=“page_list”]/ul/li”)
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]
?
來嘗試運(yùn)行一下:

?
3.翻頁,爬取更多頁面
看一下翻頁時(shí)候 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 變化的規(guī)律很簡單,只是 p 后面的數(shù)字不一樣而已,而且跟頁碼的序號(hào)是一模一樣的,這就很好辦了……寫一個(gè)簡單的循環(huán)來遍歷所有的url。
for a in range(1,6):
url = ‘http://cd.xiaozhu.com/search-duanzufang-p{}-0/’.format(a)
# 我們這里嘗試5個(gè)頁面,你可以根據(jù)自己的需求來寫爬取的頁面數(shù)量
?
完整的代碼如下:
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個(gè)頁面下來的效果:

?
相信你已經(jīng)掌握爬蟲基本的套路了,但你還需要去不斷熟悉,能獨(dú)立寫出代碼為止。
寫代碼不僅要細(xì)心,也需要耐心。很多人從入門到放棄,并不是因?yàn)榫幊踢@件事情有多難,而是某次實(shí)踐過程中,遇到一個(gè)小問題。
?
好了,這節(jié)課就到這里!

下節(jié)預(yù)告:Python爬蟲入門 | 3 爬蟲必備Python知識(shí)
完整7節(jié)課程目錄:
Python爬蟲入門 | 1 Python環(huán)境的安裝
Python爬蟲入門 | 2 爬取豆瓣電影信息
Python爬蟲入門 | 3 爬蟲必備Python知識(shí)
Python爬蟲入門 | 4 爬取豆瓣TOP250圖書信息
Python爬蟲入門 | 5 爬取小豬短租
Python爬蟲入門 | 6 將爬回來的數(shù)據(jù)存到本地
Python爬蟲入門 | 7 分類爬取豆瓣電影,解決動(dòng)態(tài)加載問題