1. 程式人生 > >Python爬蟲入門 | 5 爬取小豬短租租房資訊

Python爬蟲入門 | 5 爬取小豬短租租房資訊

小豬短租是一個租房網站,上面有很多優質的民宿出租資訊,下面我們以成都地區的租房資訊為例,來嘗試爬取這些資料。

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 只在

  • 後序號變化,於是,秒寫出爬取整頁標題的 xpath:
  • //*[@id=“page_list”]/ul/li/div[2]/div/a/span


    還是固定的套路,讓我們嘗試把整頁的標題爬下來:

    小豬在IP限制方面比較嚴格,程式碼中務必要加入 sleep() 函式控制爬取的頻率


    好了,再來對比下 xpath 資訊

    image.png

    順著標題的標籤網上找,找到整個房屋資訊標籤, 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:    
      title=div.xpath("./div[2]/div/a/span/text()"
    )[0]


    好了,來執行一下試試:

    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”)
    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]


    來嘗試執行一下:

    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爬蟲(入門+進階)》