冰冻三尺,非一日之寒。数据解析——xpath(2)
爬取二手房信息
说到二手房信息,不知道你们心里最先跳出来的公司(网站)是什么,反正我心里第一个跳出来的是网站是 58 同城。哎呦,我这暴脾气,想到就赶紧去干。
但很显然,我失败了。说显然,而不是不幸,这是因为 58 同城是大公司,我这点本事爬不了数据是再正常不过的了。下面来看看 58 同城的反爬手段了。这是我爬取下来的网页源码。
我们看到爬取下来的源码有很多英文大写字母和数字是网页源码中没有的,后来我了解到 58 同城对自己的网站的源码进行了文本加密,所以就出现了我爬取到的情况。
然后我再打开 58 同城的 robots 协议。
好家伙,不愧是大公司,所有的动态网址都不让爬取,打扰了。我只好转头离开,去寻找可以让我这种小白爬取的二手房网站。于是我找到了这个网站https://bj.c21.com.cn/ershoufang/ 不知道是我的原因,还是别的原因,反正我是没有找到这个网站的 robots 协议。不管了,既然没找到,就默认没有吧,直接开始爬取。
我本来打算通过二手房的目录跳到一个具体信息,然后爬取二手房的一些基本信息和属性。
像我红笔圈起来的部分。但很可惜我失败了,后来我看了看红笔圈起来的部分的爬取到的源码。
好家伙,还可以这样。不过这怎么可以难倒机智的我?(其实我真不知道怎么解决它)。没关系,之前的源码里不是有类似的信息吗?我只好将就一下了。
然后是翻页。翻页问题很好解决,我们很快就发现网页都是 https://bj.c21.com.cn/ershoufang/pg2/。其中的页数和 pg 后面的数字有关。
然后就是分析这些数据源码的位置了。
首先,我们发现我们要爬取的数据全在 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 reif __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): # 翻两页# 指定 urlurl = "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!!!")
最后的运行结果就像这样
冰冻三尺,非一日之寒。数据解析——xpath(2)相关推荐
- python数据解析——xpath爬取文字和图片
xpath解析:最常用且最便捷高效的一种解析方式,通用性. xpath解析原理: 1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中. 2.调用etree对象中的xpath方法 ...
- python爬虫数据解析xpath解析详细讲解——附有详细案例
案例③由于时间流逝,网页爬取失效了 最近考研复试,增加一个案例,爬取985211学校,并以excel表格形式存储 文章目录 1.什么是xpath 是最常用的最广泛的数据解析方式 2.xpath解析原理 ...
- 数据解析——xpath
目录 一.安装 二.xpath基本语法 2.1.依赖 2.2.xpath语法 2.3.实例 2.3.1.html文件 2.3.2.python 三.获取百度网站首页的"百度一下" ...
- 3.3 数据解析之xpath解析
数据解析–xpath解析 最常用最便捷高效的一种解析方式 1. 模块安装 pip install lxml from lxml import etree 2. 解析原理 实例化一个 etree 对象, ...
- iOS - XML 数据解析
前言 @interface NSXMLParser : NSObjectpublic class NSXMLParser : NSObject 1.XML 数据 XML(Extensible Mark ...
- 05-xpath爬虫数据解析
Xpaht数据解析 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 是 W3C XSLT 标准的主要元素,并且 XQuery ...
- 冰冻三尺,非一日之寒。数据解析——正则解析(1)
正则解析爬取图片 因为讲的是正则解析,而不是正则表达式,所以我就默认大家会正则表达式了.最多在这里给大家看一下正则的语法. 这也是我从B站上截图截下来的.因为我自己都是学的半懂不懂的,实在没那脸说在这 ...
- 数据解析学习笔记(正则解析、bs4解析、xpath解析)
聚焦爬虫:爬取页面中指定的页面内容. - 编码流程: - 指定url - 发起请求 - 获取响应数据 - 数据解析 - 持久化存储 数据解析分类: 正则 bs4 xpath(***) 数据解析原理概述 ...
- python爬虫实战之旅( 第三章:数据解析(xpath法))
上接:第三章:数据解析(bs4法) 下接:第四章:验证码识别 1.xpath解析简介 最常用且最便捷高效的一种解析方式.通用性很好 xpath解析原理 实例化一个etree的对象,且需要将被解析的页面 ...
- 爬虫之bs4、xpath数据解析(案例—scrapy获取菜鸟HTML页面数据)
文章结构 1.爬虫概念简介 2.爬虫的流程 3.数据解析 (1)bs4解析 (I)根据标签名查找 soup.a (II)获取属性 soup.a[attr] (III)soup.a.text 获取响应文 ...
最新文章
- Beaglebone Black的启动
- 重新认识二级指针(Pointers to Pointers)
- cmake构建器最新Windows/MACOS/LINUX版本分享
- Spring初学(一)
- chromedriver 下载_centos7中配置python爬虫selenium+chromium+chromedriver环境
- 【Spring】actual transaction available for current thread - cannot reliably process ‘remove‘ call
- 揭秘:快手用AI在短视频里玩出三大花样,背后是怎样的技术原理?
- 谷歌推出TFGAN:开源的轻量级生成对抗网络库
- 百度文库、豆丁免费下载对应的下载券资源文件
- 体系建模系统软件:体系结构建模工具攻略
- matlab画圆的命令_matlab画圆命令
- jmeter脚本录制http/https
- 西门子水处理1200PLC程序+触摸屏程序,博图V16学习程序,可仿真实验 Plc程序包含功能块,功能块为SCL编写
- 视频文件转gif图片Movie To GIF使用
- 一个IT农民工分享互联网巨头公司面试流程
- windows怎样运行wmi服务器,windows系统wmi服务器
- Belief Propagation信念传播算法详解
- shell脚本之正则表达式
- 自制智能手机电话APP
- Cobaltstrike简介、安装及简单使用
热门文章
- __mian__的作用
- 视网膜正常oct图_眼科泰斗经验分享:OCT检查图像采集及解读分析(非常值得收藏)...
- excel如何输入身份证号码
- 蓝桥杯,基础练习 Fibonacci数列(斐波那契数列) C++
- Java设计模式 -- GOF23
- 芭蕉树上第十七根芭蕉-- 隐式转换
- oracle加减乘除怎么写,加减乘除怎么写-加减乘除的名称怎么写-加减乘除的笔画怎么写...
- echarts柱形图x轴y轴互换_echarts图表x,y轴的设置
- String.Empty、string=”” 和null的区别
- DNS服务器可能不可用的解决方法