Python爬蟲入門 | 5 爬取小豬短租租房信息

小豬短租是一個(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 信息

image.png

順著標(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)加載問題

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

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

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