这里以小猪短租北京区域为例,展示如何爬取租房信息,为北京居住的小伙伴们提供便利的信息比对,找到合适自己的房子,哈哈!!!
打开小猪短租的北京区域的页面,从列表页点进第一个详情页,我们需要爬取如下信息:
在这里我们需要用到requests,BeautifulSoup两个主要函数,time函数是用来控制访问的频率,设置为两秒钟爬取一次,以免被反扒程序禁止。
我们用一个for循环和格式化的输入语句来爬取前5个列表页的内容:
urls = ['http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(str(i)) for i in range(5)]
难点是如何定位到我们需要的元素,比如我们要知道第一个信息的详情页面,需要在页面上右键点击后选择:‘检查’
会显示如下的界面,可以看到详情页面的元素是div.result_btm_con.lodgeunitname
我们筛选这个元素是唯一的就可以定位到详情页面的信息,这里可以采用print函数来帮助确认唯一性,其他的类似标题,房东信息,日租金等信息也是这样定位的。
例如日租金信息:
对应代码如下:
这里我们用到了BeautifulSoup的select函数
price = soup.select('div.day_l > span')
值得注意的是我们要构造一个字典,将爬取的放入字典以备分析,这个会在后面的数据分析里面去使用,这里只讲如何爬取信息
完整详细代码如下:
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)
爬取完成后的信息如下:
希望大家都找到自己心仪的房子,如有不正确的地方请大家指正,轻拍:)