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: 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 etreeimport requestsimport timefor 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("{} {} {} {}
".format(title,price,scrible,pic))

看一下爬了5個頁面下來的效果:

相信你已經掌握爬蟲基本的套路了,但你還需要去不斷熟悉,能獨立寫出代碼為止。

寫代碼不僅要細心,也需要耐心。很多人從入門到放棄,並不是因為編程這件事情有多難,而是某次實踐過程中,遇到一個小問題。

好了,這節課就到這裡!

如果你想有專業老師授課、有系統性知識、有實時在線答疑的老師的話,可以加入我們的課程《Python爬蟲(入門+進階)》。

下節預告:Python爬蟲入門 | 6 將爬回來的數據存到本地

完整7節課程目錄:

Python爬蟲入門 | 1 Python環境的安裝

Python爬蟲入門 | 2 爬取豆瓣電影信息

Python爬蟲入門 | 3 爬蟲必備Python知識

Python爬蟲入門 | 4 爬取豆瓣TOP250圖書信息

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

Python爬蟲入門 | 6 將爬回來的數據存到本地

Python爬蟲入門 | 7 分類爬取豆瓣電影,解決動態載入問題


推薦閱讀:

數據分析基礎之Anaconda和Python
Python學習(二)
霍金已逝,這些物理學家也慢慢被淡忘了
在業務分析中實現商業洞察 – Excel商業智能分析報表「玩」法介紹
深度神經網路幫您解析SNH48成員公式照背後的故事

TAG:網頁爬蟲 | 數據分析 | Python |