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中序列与字典的相同和不同之处
Jan 19 Python
简单谈谈python中的lambda表达式
Jan 19 Python
python3利用tcp实现文件夹远程传输
Jul 28 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
Sep 02 Python
浅谈python中拼接路径os.path.join斜杠的问题
Oct 23 Python
pyqt 实现在Widgets中显示图片和文字的方法
Jun 13 Python
django认证系统 Authentication使用详解
Jul 22 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
python 协程 gevent原理与用法分析
Nov 22 Python
利用python实现平稳时间序列的建模方式
Jun 03 Python
python 绘制场景热力图的示例
Sep 23 Python
Python中Yield的基本用法
Oct 18 Python
七个Python必备的GUI库
Python实战之用tkinter库做一个鼠标模拟点击器
Python基础之pandas数据合并
上手简单,功能强大的Python爬虫框架——feapder
python绘制箱型图
基于Python实现的购物商城管理系统
Apr 27 #Python
详解用Python把PDF转为Word方法总结
You might like
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
mysql 字段类型说明
2007/04/27 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
php使用百度翻译api示例分享
2014/01/31 PHP
php下获取http状态的实现代码
2014/05/09 PHP
PHP实现的DES加密解密实例代码
2016/04/06 PHP
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
2015/02/20 Javascript
Javascript中数组方法汇总(推荐)
2015/04/01 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
Bootstrap的Refresh Icon也spin起来
2016/07/13 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
详解关于vue2.0工程发布上线操作步骤
2018/09/27 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
[15:15]教你分分钟做大人:狙击手
2014/10/30 DOTA
python每次处理固定个数的字符的方法总结
2013/01/29 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
解决python 输出是省略号的问题
2018/04/19 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
从多个tfrecord文件中无限读取文件的例子
2020/02/17 Python
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
英国手机零售商:Metrofone
2019/03/18 全球购物
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
学习党章思想汇报
2014/01/07 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
考试作弊检讨书怎么写?
2014/12/21 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python