图片来源:花瓣网
文章来源
人工智能与大数据生活
如需转载,请联系原作者授权
最近北京房租成了热门话题,到底北京的房租有多高?
本次实战是爬取北京海淀区一居室的租房信息,共爬取了300套房源信息,看一下北京的房租到底有多高?效果如下:
开发环境
环境:MAC + Python3.6
IDE:Pycharm
模块:import requests、from bs4 import BeautifulSoup
爬取目标
本次爬取目标是北京海淀区一居室的租房信息,如下图所示。这些信息主要包括标题,租金,小区名字,中介的头像以及姓名。
爬取分析
本次需要爬取300套房源,但是某租房网站的每一页信息只有30套,如下:
因此我们需要爬取10个网页的信息,也就是爬取多个页面。通过观察,我们发现第二个网址是https://bj.lianjia.com/zufang/haidian/pg2l1/,第三个是https://bj.lianjia.com/zufang/haidian/pg3l1/,因此得出网址的规律是pg2l1的页面以此加1。
根据上面的分析,我们只需使用一个for循环就可以得到10个页面的信息,具体代码如下。然后开始解析每一个页面。
爬取一个页面
解析静态网页信息三步即可完成:
第一步:
使用requests库中的get方法解析页面,但是为了防止被反爬虫,建议使用headers进行模拟浏览器。否则你会得到下面的信息:
代码如下:
`python`
#第一步:使用GET获取页面请求
#获取页面信息
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'
}
data_url = requests.get(url,headers=headers)
第二步:
进行页面解析,找到需要的信息。本次使用的是BeautifulSoup库。Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序,具体代码如下:
`python`
#第二步:开始解析页面
soup =BeautifulSoup(data_url.text,'lxml')
#print(soup)
第三步:
使用selector进行解析页面,找到租房信息的详细页面。selector 定位需要的信息数据,具体方法是鼠标放在图片上,右键,检查,copy-CSS SELECTOR。浏览器自动copy出来css样式,具体代码如下:
`python`
'''
使用selector进行解析页面,找到租房信息的详细页面。
也就是进行页面的跳转
'''
#鼠标放在图片上,右键,检查,copy-CSS SELECTOR
#一定要去掉:NTH-CHILD(1)否则出差错
# house-lst > li:nth-child(1) > div.pic-panel > a
soup_selects = soup.select('#house-lst > li > div.pic-panel > a')
print(soup_selects)
for soup_select in soup_selects:
# selector返回的是一个列表,有很多属性信息,目的是链接,所以选择href
href_url = soup_select.get("href")
#第三步,找到详细页面进行解析
#print("得到详情页面信息")
#print(href_url)
get_detail_info(href_url)
爬取目标页面信息
由于详细的房租信息也是一个新的页面,所以需要进行再次的重复上面的三步,具体代码如下:
`python`
#第一步: 使用URL获取页面
detail_url = requests.get(url)
#第二步:使用BS4解析数据
detail_soup = BeautifulSoup(detail_url.text,'lxml')
#第三步:使用 selecter 定位需要的信息数据
#获取名称
#body > div: nth - child(7) > div.title - wrapper > div > div.title > h1
titles = detail_soup.select("body > div > div.title-wrapper > div > div.title > h1")
#print("租房信息的标题是{}".format(titles))
#获取地址
addresses = detail_soup.select("body > div > div.overview > div.content.zf-content > div.zf-room > p > a")
#print("小区名字是{}".format(addresses))
#获取价格
#body > div:nth-child(7) > div.overview > div.content.zf-content > div.price > span.total
prices = detail_soup.select("body > div > div.overview > div.content.zf-content > div.price > span.total")
#print("租房在海淀区,一居室的价格是{}".format(prices))
#获取图片
##topImg > div.imgContainer > img
images = detail_soup.select("#topImg > div.imgContainer > img")
#获取中介头像
# body > div: nth - child(7) > div.overview > div.content.zf - content > div.brokerInfo > a > img
avartars = detail_soup.select("body > div > div.overview > div.content.zf-content > div.brokerInfo > a > img")
#获取中介姓名
#body > div:nth-child(7) > div.overview > div.content.zf-content > div.brokerInfo > div > div.brokerName > a.name.LOGCLICK
names = detail_soup.select("body > div > div.overview > div.content.zf-content > div.brokerInfo > div > div.brokerName > a.name.LOGCLICK")
#获取房东性别
#sexs = address = detail_soup.select("#floatRightBox > div.js_box.clearfix > div.member_pic > div")
效果如下
到此,整个爬虫流程完成,完美的爬出来想要的信息,然后就可以分析北京的房租了。
完
扫描下方二维码加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习吧~~
成为群成员,或拉人进群,
还有机会获得免费赠书哦~~
投稿啦!!!
精彩继续
CSDN作为国内专业的云计算服务平台,目前提供云计算、大数据、虚拟化、数据中心、OpenStack、CloudStack、机器学习、智能算法等相关云计算观点、技术、平台、实践、云产业咨询等服务。CSDN 公众号也一直坚持「与千万技术人共成长」的理念,深度解读行业内热门技术与场景应用,致力于让所有开发者保持敏锐的技术嗅觉、对行业趋势与技术获得更广阔的认知。
文章题材
首先你需要关注我们的公众号“CSDN云计算”,这样你会更准确了解我们需要的文章风格;
侧重于云计算领域相关的文章,可以是技术、运维、趋势等方面的务实内容;
原创,要求文章有鲜明观点和看法。
投稿须知
稿费:根据原创性、实用性和时效性等方面进行审核,通过的文章会发布在本微信平台。一经采用,我们将支付作者酬劳。酬劳可能不多,这代表的是一个心意,更多是因为爱好,是有识之士抒发胸怀的一种方式;
字数要求:稿件字数以2K-8K为宜,少于2K或多于8K都会一定程度降低阅读愉悦感;
投稿邮箱:lijy@csdn.net。或者添加微信表明来意,微信号:tangguoyemeng。请备注投稿+姓名+公司职位。
如果咱们的合作稳定又愉快,还可以签订合同长期合作哦!