Python爬虫之爬取二手房信息


Posted in Python onApril 27, 2021

前言

说到二手房信息,不知道你们心里最先跳出来的公司(网站)是什么,反正我心里第一个跳出来的是网站是 58 同城。哎呦,我这暴脾气,想到就赶紧去干。

但很显然,我失败了。说显然,而不是不幸,这是因为 58 同城是大公司,我这点本事爬不了数据是再正常不过的了。下面来看看 58 同城的反爬手段了。这是我爬取下来的网页源码。

Python爬虫之爬取二手房信息

我们看到爬取下来的源码有很多英文大写字母和数字是网页源码中没有的,后来我了解到 58 同城对自己的网站的源码进行了文本加密,所以就出现了我爬取到的情况。

爬取二手房信息

我打开 58 同城的 robots 协议。

Python爬虫之爬取二手房信息

好家伙,不愧是大公司,所有的动态网址都不让爬取,打扰了。我只好转头离开,去寻找可以让我这种小白爬取的二手房网站。于是我找到了c21网站,不知道是我的原因,还是别的原因,反正我是没有找到这个网站的 robots 协议。不管了,既然没找到,就默认没有吧,直接开始爬取。

我本来打算通过二手房的目录跳到一个具体信息,然后爬取二手房的一些基本信息和属性。

Python爬虫之爬取二手房信息
Python爬虫之爬取二手房信息

像我红笔圈起来的部分。但很可惜我失败了,后来我看了看红笔圈起来的部分的爬取到的源码。

Python爬虫之爬取二手房信息

好家伙,还可以这样。不过这怎么可以难倒机智的我?(其实我真不知道怎么解决它)。没关系,之前的源码里不是有类似的信息吗?我只好将就一下了。

Python爬虫之爬取二手房信息

然后是翻页。翻页问题很好解决,我们很快就发现网页都是 https://bj.c21.com.cn/ershoufang/pg2/。其中的页数和 pg 后面的数字有关。

然后就是分析这些数据源码的位置了。

Python爬虫之爬取二手房信息

首先,我们发现我们要爬取的数据全在 li 标签里,所以我们可以先获得 li 标签的列表。伪代码就像这样。

form lxml import etree
……   ……
tree = etree.HTML(源码)
li_list = tree.xpath( li 标签的路径)

这时候我们获得的就是 li 标签的 etree 的类,可以继续使用 etree 类里的函数。然后我们就可以利用 for 循环提出不同房源的 li 标签,根据自己的需要获取文本信息。

欧克,了解了这些(感觉源码前前后后就是四个字 ”我是菜鸡“ )我们就可以开始写代码了。

import requests
from lxml import etree
import re

if __name__ == "__main__":
    # UA伪装
    header = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36"
        }

    for pg in range(1, 3): # 翻两页
        # 指定 url
        url = "https://bj.c21.com.cn/ershoufang/pg%s/" % str(pg)

        # 获取网页源码
        page = requests.get(url = url, headers = header).text

        # xpath 解析
        tree = etree.HTML(page)
        li_list = tree.xpath('//ul[@id="availability"]/li') 
        for li in li_list:
            title = li.xpath('div[2]/div/a/text()')[0] # 房子的名称
            # print(title[0]) # 测试
            add = li.xpath('div[2]/div/p//a/text()') # 地址
            add = add[-2: ] + add[0:1] # 地址范围由大到小
            # print(add) # 测试
            div_list = li.xpath('div[2]/div[2]/div')
            # 具体信息
            message_list = ["建筑面积", "房屋户型", "房屋朝向", "所在楼层", "装修情况", "建成时间"]
            for i in range(6):
                div = div_list[i]
                message = div.xpath('span/text()')[0]
                message = re.sub("\s", "", str(message)) # 因为发现获取的文本有很多换行符和空格,所以需要去掉
                message = re.sub("\\n", "", str(message))
                message_list[i] = message_list[i] + ":" + message
            # print(message_list) # 测试
            # 交通情况
            traffic = li.xpath('div[2]/div[4]//text()')
            # print(traffic) # 测试
            # 价格情况
            price = li.xpath('div[2]/div[3]//text()')
            price = price[0] + price[1]
            # print(price) # 测试
            with open("C:\\Users\\ASUS\\Desktop\\CSDN\\数据解析\\xpath\\二手房\\" + "二手房.txt", "a", encoding = "utf-8") as fp:
                fp.write(title + "\n")
                for message in message_list:
                    fp.write(message + "\n")
                if traffic == []:
                    fp.write("交通情况:无介绍" + "\n")
                else:
                    fp.write("交通情况:" + traffic[0] + "\n")
                fp.write("价格:" + price + "\n\n")
            print(title, "下载完成!!!")

    print("over!!!")

爬取结果

最后的运行结果就像这样

Python爬虫之爬取二手房信息

到此这篇关于Python爬虫之爬取二手房信息的文章就介绍到这了,更多相关Python爬取二手房信息内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
用Python编写web API的教程
Apr 30 Python
Python功能键的读取方法
May 28 Python
详解Django-auth-ldap 配置方法
Dec 10 Python
Python OpenCV实现视频分帧
Jun 01 Python
Python实现网页截图(PyQT5)过程解析
Aug 12 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
Feb 28 Python
python实现猜拳游戏
Mar 04 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
Jun 12 Python
python字符串拼接+和join的区别详解
Dec 03 Python
Scrapy实现模拟登录的示例代码
Feb 21 Python
浅谈python数据类型及其操作
May 25 Python
如何利用opencv判断两张图片是否相同详解
Jul 07 Python
七个Python必备的GUI库
Python实战之用tkinter库做一个鼠标模拟点击器
Python基础之pandas数据合并
上手简单,功能强大的Python爬虫框架——feapder
python绘制箱型图
基于Python实现的购物商城管理系统
Apr 27 #Python
详解用Python把PDF转为Word方法总结
You might like
PHP4与PHP5的时间格式问题
2008/02/17 PHP
网易JS面试题与Javascript词法作用域说明
2010/11/09 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
jquery自定义下拉列表示例
2014/04/25 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
微信小程序 如何引入外部字体库iconfont的图标
2018/01/31 Javascript
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
javascript json字符串到json对象转义问题
2019/01/22 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
2019/05/20 Javascript
vue-loader中引入模板预处理器的实现
2019/09/04 Javascript
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python与R语言的简要对比
2017/11/14 Python
python不换行之end=与逗号的意思及用途
2017/11/21 Python
基于Python log 的正确打开方式
2018/04/28 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
戴森英国官网:Dyson英国
2019/05/07 全球购物
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
会议接待欢迎词
2014/01/12 职场文书
日本语毕业生自荐信
2014/02/01 职场文书
暑期社会实践先进个人主要事迹
2014/05/22 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
2014年银行员工工作总结
2014/11/12 职场文书
维稳承诺书
2015/01/20 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
预备党员表决心的话
2015/09/22 职场文书
《秋天的图画》教学反思
2016/02/19 职场文书