Python爬虫之爬取二手房信息

作者:世界的隐喻 时间:2021-08-11 19:40:50 

前言

说到二手房信息,不知道你们心里最先跳出来的公司(网站)是什么,反正我心里第一个跳出来的是网站是 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爬虫之爬取二手房信息

来源:https://blog.csdn.net/ShiJieDeYinYu/article/details/116138179

标签:Python,爬取,二手房,信息
0
投稿

猜你喜欢

  • 获取星期几的名称

    2012-01-29 18:16:31
  • 设计提升满意度

    2010-05-16 15:00:00
  • 利用OBJECT_DEFINITION函数来代码存档

    2009-01-20 15:34:00
  • php引用返回与取消引用的详解

    2023-11-20 02:50:07
  • js自定义快捷,IE,FF有良好的支持

    2007-08-25 17:34:00
  • JSP 开发之 releaseSession的实例详解

    2023-06-14 11:49:03
  • Oracle中时间日期转化函数to_date和to_char的具体使用

    2023-07-15 20:20:20
  • Go语言题解LeetCode561数组拆分

    2023-06-20 22:49:14
  • Keras中的多分类损失函数用法categorical_crossentropy

    2023-06-23 12:25:37
  • 如何才能保护好我们的SQL Server数据库

    2009-01-08 13:37:00
  • 使用面向对象的技术创建高级JavaScript Web 应用程序

    2008-11-03 13:00:00
  • javascript 的 in 操作符实例详解

    2007-10-07 12:00:00
  • 典型的三行二列居中高度自适应css布局

    2008-02-22 16:02:00
  • php header功能的使用

    2023-11-15 09:25:26
  • Javascript浅拷贝与深拷贝实现

    2013-07-16 22:47:46
  • 在Dreamweaver中自动设置网页的水平线颜色

    2007-02-03 11:30:00
  • 用XML创建可排序、分页的数据显示页面

    2008-04-22 18:25:00
  • 用js限制网页只在微信浏览器中打开(或者只能手机端访问)

    2023-09-24 00:11:25
  • 如何判断用户是否非正常离开聊天室?

    2010-01-18 20:30:00
  • Frontpage2003的怪bug,自动添加“../”的父级目录

    2007-09-30 13:30:00
  • asp之家 网络编程 m.aspxhome.com