一、首先明确爬取的数据为安居客(北京)的二手房源的数据信息,主要有房源链接地址,房源价格,房源单价,房源规模,房源大小,房源建造年份,房源地址。

https://beijing.anjuke.com/sale/p1/#filtersort

二、分析网页和确定储存方式

首先需要做的是确定翻页规则

第一页 发现地址为

第二页 发现地址为

第三页 发现地址为

细心的同学可能已经看出来了,变化的只有最后面图中高亮部分,也就是说,我们第一页就是p1,第二页就是p2,第三页就是p3了

其次我们需要明确解析数据所使用的方法,通过抓包我们可以发现响应是html格式的,所以小编这里采用的是lxml解析,其中每个数据的xpath解析式为

.xpath('//div[@class="house-title"]/a/@href')  # 房源链接
.xpath('//div[@class="house-title"]/a/@title')  # 房源名称
.xpath('//span[@class="price-det"]/strong/text()')  # 房源价格
.xpath('//span[@class="unit-price"]/text()')  # 房源单价
.xpath('//div[@class="house-details"]/div[2]/span[1]/text()')  # 房源规模
.xpath('//div[@class="house-details"]/div[2]/span[2]/text()')  # 房源大小
.xpath('//div[@class="house-details"]/div[2]/span[4]/text()')  # 建筑年份
.xpath('//div[@class="house-details"]/div[2]/span[5]/text()')  # 联系人
.xpath('//div[@class="housedetails"]/div[3]/span[1]/@title'))  # 房源地址

最后,小编思考了一下数据存储的方式,这里小编采用了一个字典存取这个房源的所有信息,当然最好使用房源链接作为key,因为这个是不可能重复的,而且当我们翻页的时候,还能保证不会抓取到重复数据,其中value就作为房源的一些基本信息(类型也是字典,key为每个信息的名称,value为具体的值),最后每个房源的信息,存到一个列表中

所以基本确定最后的储存格式为

单个房源信息(字典)={‘房屋名称’:‘名称xx’,‘房屋价格’:‘价格xx’,‘房屋单价’:单价xx‘’,‘房屋规模’:‘规模xx’,‘房屋大小’:‘大小xxx’.................}

单个房源信息(字典)={‘房源链接’:房源信息''}

所有房源信息(列表)=[{房屋1},{房屋2},{房屋3}]

三、代码部分

小编这里还格外写了一个方法,将抓取的数据,存到excel中了,这里是使用了pandas模块,这里有个比较容易进坑的点

以你为通过xpath提取出来的 类型是<class 'lxml.etree._ElementUnicodeResult'>,他不是字符串,所以最后我们写入excel的时候,需要转换成str才能写入。

# author:xjp
# email:1163739580@qq.com
# filename:Anjuke.py
# project:python_code_warehouse
# datetime:2019/3/15 21:19
# software: PyCharm
# python_version:3.6
# message:北京安居客获取 房源链接(唯一,作为key),房源的名称,价格,几房几厅 ,大小,建造年份,联系人,地址,网页地址为https://beijing.anjuke.com/sale/p1/#filtersort
import requests
from lxml import etree
import time
import pandas as pd
import os
from requests.packages.urllib3.exceptions import InsecureRequestWarningrequests.packages.urllib3.disable_warnings(InsecureRequestWarning)class Anjuke(object):def __init__(self):self.houses_info = {}  # 所有房源信息 房源地址作为key 房源信息作为valueself.start_page = 1  # 开始页码self.end_page = 5  # 结束页码self.page = 1  # 当前页码self.base_url = "https://beijing.anjuke.com"self.r = requests.session()self.header = {'User-Agent': 'Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/72.0.3626.96Safari/537.36', }def get_houses_info(self):while True:get_house_info_url = self.base_url + "/sale/p{}/#filtersort".format(self.page)print("正在爬取第%d页 地址为%s " % (self.page, get_house_info_url))house_html = self.r.get(url=get_house_info_url, verify=False, headers=self.header).texthouse_url = etree.HTML(house_html).xpath('//div[@class="house-title"]/a/@href')  # 房源链接house_name = etree.HTML(house_html).xpath('//div[@class="house-title"]/a/@title')  # 房源名称house_price = etree.HTML(house_html).xpath('//span[@class="price-det"]/strong/text()')  # 房源价格house_unit_price = etree.HTML(house_html).xpath('//span[@class="unit-price"]/text()')  # 房源单价house_scale = etree.HTML(house_html).xpath('//div[@class="house-details"]/div[2]/span[1]/text()')  # 房源规模 及几室几厅house_size = etree.HTML(house_html).xpath('//div[@class="house-details"]/div[2]/span[2]/text()')  # 房源大小house_year_built = etree.HTML(house_html).xpath('//div[@class="house-details"]/div[2]/span[4]/text()')  # 建筑年份house_contact_people = etree.HTML(house_html).xpath('//div[@class="house-details"]/div[2]/span[5]/text()')  # 联系人house_address = self.remove_blank_space(*etree.HTML(house_html).xpath('//div[@class="house-details"]/div[3]/span[1]/@title'))  # 房源地址# 将信息存入house_info = {}for i in range(len(house_url)):house_info["house_name"] = str(house_name[i])house_info["house_price"] = str(house_price[i])house_info["house_unit_price"] = str(house_unit_price[i])house_info["house_scale"] = str(house_scale[i])house_info["house_size"] = str(house_size[i])house_info["house_year_built"] = str(house_year_built[i])house_info["house_contact_people"] = str(house_contact_people[i])house_info["house_address"] = str(house_address[i])self.houses_info[str(house_url[i])] = house_info  # 自动去重house_info = {}  # !!!每次需要清空,否则会导致会被覆盖if self.page == self.end_page:breakself.page += 1time.sleep(2)@staticmethoddef remove_blank_space(*ak):"""将序列里面的每个值,去除空格:param ak: 接受的序列:return:序列"""sequence = []for a in ak:sequence.append("".join(str(a).split()))return sequence@staticmethoddef generating_excel_data(**houses_info):"""将房源信息生成excel"""houses_info_excel = {}  # key为excel的列名house_name_list = []house_price_list = []house_unit_price_list = []house_scale_list = []house_size_list = []house_year_built_list = []house_contact_people_list = []house_address_list = []house_url_list = []for house_url in houses_info:house_name_list.append(housess_info[house_url]["house_name"])house_price_list.append(houses_info[house_url]["house_price"])house_unit_price_list.append(houses_info[house_url]["house_unit_price"])house_scale_list.append(houses_info[house_url]["house_scale"])house_size_list.append(houses_info[house_url]["house_size"])house_year_built_list.append(houses_info[house_url]["house_year_built"])house_contact_people_list.append(houses_info[house_url]["house_contact_people"])house_address_list.append(houses_info[house_url]["house_address"])house_url_list.append(house_url)houses_info_excel["房源名称"] = house_name_listhouses_info_excel["价格(万元)"] = house_price_listhouses_info_excel["均价(元)"] = house_unit_price_listhouses_info_excel["房屋规模"] = house_scale_listhouses_info_excel["房屋大小"] = house_size_listhouses_info_excel["房屋建立时间"] = house_year_built_listhouses_info_excel["房东"] = house_contact_people_listhouses_info_excel["房屋地址"] = house_address_listhouses_info_excel["房屋链接"] = house_url_listfile_path = r'北京安居客二手房屋信息.xlsx'  # 文件需要保存路径writer = pd.ExcelWriter(file_path)df = pd.DataFrame(houses_info_excel)df.to_excel(writer, columns=houses_info_excel.keys(), index=False, encoding='utf-8',sheet_name='北京二手房屋信息')writer.save()print("合计:%s条房屋信息写入excel完成 生成路径为%s" % (len(houses_info), os.getcwd() + r"/" + file_path))if __name__ == "__main__":xiejiangpeng = Anjuke()xiejiangpeng.get_houses_info()housess_info = xiejiangpeng.houses_infoxiejiangpeng.generating_excel_data(**housess_info)

四、运行截图以及结果图展示

源网页展示

程序运行展示

生成的excel展示

实战项目一、安居客(北京) 二手房抓取房源信息相关推荐

  1. scrapy爬虫实战:安居客深圳二手房

    温馨提示:想要本次爬虫源代码的同学 请关注公众号:python小咖 回复 ' 安居客爬虫 ' 获取源码 --------------------------------- 接下来进入正题 本次爬虫实现 ...

  2. Python3 爬虫实战 — 安居客武汉二手房【requests、Beautiful Soup、CSV】

    爬取时间:2019-10-09 爬取难度:★★☆☆☆☆ 请求链接:https://wuhan.anjuke.com/sale/ 爬取目标:爬取武汉二手房每一条售房信息,包含地理位置.价格.面积等,保存 ...

  3. 安居客无锡二手房数据获取

    安居客无锡二手房 用selenium模拟浏览器抓取 使用requests抓取网页,用bs4解析网页 使用lxml解析网页 (xpath) 网址: https://wuxi.anjuke.com/sal ...

  4. 安居客广州二手房定价分析

    数据 数据爬虫所得,为安居客广州二手房信息,由于数据量不大,所有分析只是针对这个二手房网站上发布的二手房信息所进行的一些简单分析,不能避免偶然性.本人对房价分析亦没什么了解,以下均只是当作数据分析的练 ...

  5. python爬取新浪微博数据中心_Python爬虫框架Scrapy实战之批量抓取招聘信息

    网络爬虫抓取特定网站网页的html数据,但是一个网站有上千上万条数据,我们不可能知道网站网页的url地址,所以,要有个技巧去抓取网站的所有html页面.Scrapy是纯Python实现的爬虫框架,用户 ...

  6. python爬上市公司信息_实战项目 1:5 行代码爬取国内所有上市公司信息

    实战项目 1:5 行代码爬取国内所有上市公司信息 Python入门爬虫与数据分析 在正式开始这门专栏课的学习之前,我们先来看一个简单的爬虫案例.兴趣是最好的老师,当你对爬虫产生兴趣的时候,才会更有动力 ...

  7. 【php】curl模拟登录抓取页面信息

    [php]curl模拟登录抓取页面信息 在本项目中,使用php抓取四川大学综合教务网站的成绩信息.课程信息以及登录用户的基本资料,解析数据并存入数据库,以实现对所得信息的进一步分析,并呈现给用户. 本 ...

  8. python爬虫代码房-Python爬虫一步步抓取房产信息

    原标题:Python爬虫一步步抓取房产信息 前言 嗯,这一篇文章更多是想分享一下我的网页分析方法.玩爬虫也快有一年了,基本代码熟悉之后,我感觉写一个爬虫最有意思的莫过于研究其网页背后的加载过程了,也就 ...

  9. Python+Selenium自动搜索基金业协会指定企业名单,抓取指定信息并保存到数据库...

    Python+Selenium自动搜索基金业协会指定企业名单,抓取指定信息并保存到数据库.网址https://gs.amac.org.cn/amac-infodisc/res/pof/manager/ ...

最新文章

  1. Java开发环境的搭建以及使用eclipse从头一步步创建java项目
  2. 086.冒泡排序的缺点及解决方案
  3. oracle多次发运,Oracle EBS 关于发运收集整理
  4. MySQL 表一列逗号分隔字段,按逗号切割
  5. eclipse插件大全整理学习
  6. 各大媒体优劣对比_吉利星瑞特别版对比朗逸,亮点只有性价比?
  7. 阿里云Kubernetes服务上从零搭建GitLab+Jenkins+GitOps应用发布模型的实践全纪录
  8. ruby array_Ruby中带有示例的Array.zip()方法
  9. 刚刚,SeetaFace版本升级!新增活体检测等功能
  10. LeetCode【344. 反转字符串】
  11. Linux 安装python 模块及库
  12. 多功能下拉分页选择插件SelectPage插件 http://www.jq22.com/jquery-info14227
  13. Docsify+github/gitee搭建个人博客
  14. poi操作PPT读取模板流,生成新PPT文件
  15. 百事可乐AI人工智能生产过程破光
  16. 递归函数--猴子摘桃问题的解题思路
  17. BeautifulSoup4 模块中文文档
  18. python基础实例
  19. 【Unity插件】游戏摇杆Joystick
  20. Android exposed beyond app through Intent.getData()

热门文章

  1. 树莓派4B简单使用内容(以移植QT应用为例)
  2. cass光标大小怎么调_CAD如何调整十字光标和靶框大小
  3. 如何注册腾讯云账号(图文教程)?
  4. win10家庭版启用远程桌面
  5. [转].NET开发邮件发送功能的全面教程(含邮件组件源码)
  6. Ravpower苹果20W充电器,充电快又稳,使用更安全
  7. JAVA POI获取excel单元格红色字体,淡蓝色前景色的内容
  8. Python 入门之控制结构 - 顺序与选择结构
  9. GCPC 13 A Boggle 暴力,Trie剪枝
  10. 易班轻应用富文本介绍