python3爬取“小猪短租-北京”租房信息


爬虫思路分析:

1. 观察小猪短租(北京)的网页

首页:http://www.xiaozhu.com/?utm_source=baidu&utm_medium=cpc&utm_term=PC%E6%A0%87%E9%A2%98&utm_content=pinzhuan&utm_campaign=BDPZ

选择“北京”,然后点“搜索小猪”,获取北京市的首页url:http://bj.xiaozhu.com/

观察右侧详情,页面最下面有分页,点击第2、第3页观察url的变化

http://bj.xiaozhu.com/search-duanzufang-p2-0/

http://bj.xiaozhu.com/search-duanzufang-p3-0/

验证首页是否可以写作:http://bj.xiaozhu.com/search-duanzufang-p0-0/(答案是ok的,大部分分页行的网站首页都是可以与其他分页统一化的)

因此,分页的URL可以这么构造:http://bj.xiaozhu.com/search-duanzufang-p{}-0/.format(number),其中number是几就是第几页


2. 观察右侧的信息,发现每个房源的信息不全,需要手动点击进去才能看到详情

因此需要获取每个房源的详情页面的URL



3. 观察某一房源的详细信息,这里我们提取“标题、地址、价格、房东名字、性别”等


源代码:

import requests

from bs4 import BeautifulSoup as bs4

headers = {

'User-Agent':'User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'

}

"""获取每一个房源的网址,参数是分页url"""

def get_link(url):

html_data = requests.get(url, headers = headers)

soup = bs(html_data.text, 'lxml')#bs4推荐使用的的解析库

#print(soup.prettify()) #标准化输出url中的源代码(有可能跟网页查看中的不一致,网页中有可能标签书写不规范)以此为基础抓取,如果抓取失败,用此命令查看源代码

links = soup.select('#page_list > ul > li > a')#注意循环点!!!直接粘贴过来的是“#page_list > ul > li:nth-child(1) > a > img”,需要去掉:nth-child(1),注意每个标签前后有空格

#print(links)

for link in links:

link = link.get('href')

#print(link)

get_info(link)

"""

"""#获取每一个房源的详细信息,参数url是每个房源的网址"""

def get_info(url):

html_data = requests.get(url, headers = headers)

soup = bs(html_data.text, 'lxml')#bs4推荐使用的的解析库

# print(soup.prettify()) #标准化输出url中的源代码(有可能跟网页查看中的不一致,网页中有可能标签书写不规范)以此为基础抓取,如果抓取失败,用此命令查看源代码

title = soup.select('div.wrap.clearfix.con_bg > div.con_l > div.pho_info > h4 > em')[0].string

# 用网页copy过来的全部是“body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > h4 > em”,但是使用这个爬不出来数据(我也不知道why),把body去掉或者用下面最简短的方式(只使用最近的且唯一的div)

# title = soup.select('div.pho_info > h4 > em ')

# 查询结果title格式是一维列表,需要继续提取列表元素(一般就是[0]),列表元素是前后有标签需要继续提取标签内容,使用get_text()或者string

address = soup.select('div.wrap.clearfix.con_bg > div.con_l > div.pho_info > p > span')[0].string.strip()

price = soup.select('#pricePart > div.day_l > span')[0].string.strip() # div中的id=pricePart是唯一性的,因此不用写前面的div

name = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > a')[0].string.strip()

img = soup.select('#floatRightBox > div.js_box.clearfix > div.member_pic > a > img')[0].get('src').strip() # 获取标签的属性值

sex = soup.select('#floatRightBox > div.js_box.clearfix > div.member_pic > div')[0].get('class')[0].strip() # 获取标签的属性值

#将详细数据整理成字典格式

data = {

'标题':title,

'地址':address,

'价格':price,

'房东姓名':name,

'房东性别':sex,

'房东头像':img

}

print(data)

"""

"""#程序主入口"""

if __name__=='__main__':

for number in range(0,1):

url = 'http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(number) #构造分页url(不是房源详情的url)

get_link(url)



转载于:https://juejin.im/post/5beeb2c9e51d456f94126df1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值