這裡以小豬短租北京區域為例,展示如何爬取租房資訊,為北京居住的小夥伴們提供便利的資訊比對,找到合适自己的房子,哈哈!!!
打開小豬短租的北京區域的頁面,從清單頁點進第一個詳情頁,我們需要爬取如下資訊:
在這裡我們需要用到requests,BeautifulSoup兩個主要函數,time函數是用來控制通路的頻率,設定為兩秒鐘爬取一次,以免被反扒程式禁止。
我們用一個for循環和格式化的輸入語句來爬取前5個清單頁的内容:
難點是如何定位到我們需要的元素,比如我們要知道第一個資訊的詳情頁面,需要在頁面上右鍵點選後選擇:‘檢查’
會顯示如下的界面,可以看到詳情頁面的元素是div.result_btm_con.lodgeunitname
我們篩選這個元素是唯一的就可以定位到詳情頁面的資訊,這裡可以采用print函數來幫助确認唯一性,其他的類似标題,房東資訊,日租金等資訊也是這樣定位的。
例如日租金資訊:
對應代碼如下:
這裡我們用到了BeautifulSoup的select函數
值得注意的是我們要構造一個字典,将爬取的放入字典以備分析,這個會在後面的資料分析裡面去使用,這裡隻講如何爬取資訊
完整詳細代碼如下:
import requests
from bs4 import BeautifulSoup
import time
urls = ['http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(str(i)) for i in range(5)] #抓取前5頁資訊
def link(urls):
first_wb_data = requests.get(urls) #用requests函數抓取頁面
time.sleep(2) #每隔2秒抓取
soup = BeautifulSoup(first_wb_data.text,'lxml') #導入BeautifulSoup讀取
next_url = soup.select('div.result_btm_con.lodgeunitname') #找到詳情頁面連結
for next_url in next_url:
next_url = next_url.get('detailurl') #提取目前清單頁面的所有詳情頁面連結
get_detail_url(next_url,data=None) #調用抓取詳情頁面内容的函數
def get_detail_url(url,data=None): #抓取詳情頁面内容的函數
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text, 'lxml')
title = soup.select('div.con_l > div.pho_info > h4 >em') #抓取标題
address = soup.select('div.con_l > div.pho_info > p') #抓取位址
price = soup.select('div.day_l > span') #抓取價格
imgs = soup.select('img#curBigImage') #抓取圖檔
picture = soup.select('div.member_pic > a > img') #抓取圖檔
name = soup.select('a.lorder_name') #抓取房東名字
sex = soup.select('div.w_240 > h6 > span') #抓取房東性别
for title,address,price,imgs,picture,name,sex in zip(title,address,price,imgs,picture,name,sex): #将爬取的資訊放入字典
data = {
'title':title.get_text(),
'address':address.get('title'),
'price':price.get_text(),
'imgs':imgs.get('src'),
'picture':picture.get('src'),
'name':name.get('title'),
'sex':sex.get('class'),
}
print(data)
for url in urls:
link(url)
爬取完成後的資訊如下:
希望大家都找到自己心儀的房子,如有不正确的地方請大家指正,輕拍:)