用爬虫收集网站公开数据丨Python爬虫实战系列(5)
提示:最新Python爬虫资料/代码练习>>戳我直达
文章目录
- 前言
- 用爬虫收集公开数据
- 编写程序流程分析
- 确定Xpath表达式
- 1) 确定基准表达式
- 2) 确定抓取信息的表达式
- 3) 提高抓取效率
- 编写程序代码
- 小结
前言
lxml 解析库的应用
在编写此程序的过程中,您将体会到 lxml 解析库
的实际应用。
话不多说,开练!
用爬虫收集公开数据
编写程序流程分析
打开网站后,第一步,确定网站是否为静态网站,通过在网页源码内搜索关键字的方法,可以确定其为静态网站;第二步,确定要抓取页面的 URL 规律,第三步,根据要抓取的数据确定 Xpath 表达式;最后一步,编写 Python 爬虫程序。
通过简单的分析可知 URL 具有以下规律:
确定Xpath表达式
使用 Chrome 开发者工具对页面元素进行审查,从而确定 Xpath 表达式。首先根据要抓取的数据确定“基准表达式”。通过审查一处房源的元素结构,可以得知房源信息都包含在以下代码中:
1) 确定基准表达式
待抓取的信息都包含在相应的
<div class="positionInfo">..</div>
<div class="address">...</div>
<div class="priceInfo">...</div>
而每个页面中都包含 30 个房源,因此我们要匹配以下节点的父节点或者先辈节点,从而确定 Xpath 基准表达式:
<div class="info clear"></div>
通过页面结构分析可以得出每页的 30 个房源信息全部包含以下节点中:
<ul class="sellListContent" log-mod="list">
<li class="clear LOGVIEWDATA LOGCLICKDATA">
房源信息..
</li>
</ul>
接下来,使用调试工具定位上述元素,然后滚动鼠标滑。这时候神奇的一幕出现了,你会发现li
标签的class
属性值发生了变化,其结果如下:
<ul class="sellListContent" log-mod="list">
<li class="clear LOGCLICKDATA">
房源信息..
</li>
</ul>
发生变化的原因是由于 JS 事件触发导致的。因此就需要去页面的源码页进行匹配。
下面使用Ctrl+F
分别对 class 变化前后的属性值进行检索,最后发现源码页只存在如下属性:
class="clear LOGVIEWDATA LOGCLICKDATA"
因此 Xpath 基准表达式如下所示:
//ul[@class="sellListContent"]/li[@class="clear LOGVIEWDATA LOGCLICKDATA"]
2) 确定抓取信息的表达式
根据页面元素结构确定待抓取信息的 Xpath 表达式,分别如下:
小区名称:name_list=h.xpath('.//a[@data-el="region"]/text()')
房屋介绍:info_list=h.xpath('.//div[@class="houseInfo"]/text()')
地址信息:address_list=h.xpath('.//div[@class="positionInfo"]/a/text()')
单价信息:price_list=h.xpath('.//div[@class="unitPrice"]/span/text()')
其中房屋介绍,主要包含了以下信息:
因此,匹配出的 info_list 列表需要经过处理才能得出我们想要的数据,如下所示:
info_list=h.xpath('.//div[@class="houseInfo"]/text()')
if info_list:#处理列表数据L=info_list[0].split('|')# ['2室1厅 ', ' 88.62平米 ', ' 北 南 ', ' 简装 ', ' 顶层(共6层) ', ' 2004年建 ', ' 板楼']if len(L) >= 5:item['model']=L[0].strip()item['area']=L[1].strip()item['direction']=L[2].strip()item['perfect']=L[3].strip()item['floor']=L[4].strip()
3) 提高抓取效率
为了提高网页信息的抓取质量,减小网络波动带来的响应,我们可以设置一个规则:在超时时间内(3秒),在该时间内对于请求失败的页面尝试请求三次,如果均未成功,则抓取下一个页面。
requests.get()
方法提供了 timeout
参数可以用来设置超时时间,此方法还提供了其他实用性参数,比如 auth(用户认证)、veryify(证书认证)、proxies(设置代理 IP),这在后续内容中会做相应介绍。
编写程序代码
通过上述分析得出了所有的 Xpath 表达式,下面开始编写爬虫程序,代码如下:
- 代码不要拿来就用,仔细看看,主要是学习阿星的方法
#coding:utf8
import requests
import random
from lxml import etree
import time
#提供ua信息的的包
from fake_useragent import UserAgentclass LinajiaSpider(object):def __init__(self):self.url='https://lj网址/ershoufang/pg{}/'#计数,请求一个页面的次数,初始值为1self.blog=1# 随机取一个UAdef get_header(self):#实例化ua对象ua=UserAgent()headers={'User-Agent':ua.random}return headers#发送请求def get_html(self,url): #在超时间内,对于失败页面尝试请求三次if self.blog<=3:try:res=requests.get(url=url,headers=self.get_header(),timeout=3)html=res.textreturn htmlexcept Exception as e:print(e)self.blog+=1self.get_html(url)# 解析提取数据def parse_html(self,url):html=self.get_html(url)if html:p=etree.HTML(html)#基准xpath表达式-30个房源节点对象列表h_list=p.xpath('//ul[@class="sellListContent"]/li[@class="clear LOGVIEWDATA LOGCLICKDATA"]')#所有列表节点对象for h in h_list:item={}#名称name_list=h.xpath('.//a[@data-el="region"]/text()')#判断列表是否为空item['name']=name_list[0] if name_list else None#户型+面积+方位+是否精装..['2室1厅 | 88.62平米 | 北 南 | 简装 | 顶层(共6层) | 2004年建 | 板楼']info_list=h.xpath('.//div[@class="houseInfo"]/text()')#判断列表是否为空if info_list:L=info_list[0].split('|')# ['2室1厅 ', ' 88.62平米 ', ' 北 南 ', ' 简装 ', ' 顶层(共6层) ', ' 2004年建 ', ' 板楼']if len(L) >= 5:item['model']=L[0].strip()item['area']=L[1].strip()item['direction']=L[2].strip()item['perfect']=L[3].strip()item['floor']=L[4].strip()#区域+总价+单价address_list=h.xpath('.//div[@class="positionInfo"]/a/text()')item['address']=address_list[0].strip() if address_list else Nonetotal_list=h.xpath('.//div[@class="totalPrice"]/span/text()')item['total_list']=total_list[0].strip() if total_list else Noneprice_list=h.xpath('.//div[@class="unitPrice"]/span/text()')item['price_list']=price_list[0].strip() if price_list else Noneprint(item)# 入口函数def run(self):try:for i in range(1,101):url=self.url.format(i)self.parse_html(url)time.sleep(random.randint(1,3))#每次抓取一页要初始化一次self.blogself.blog=1except Exception as e:print('发生错误',e)if __name__ == '__main__':spider=LinajiaSpider()spider.run()
展示部分输出结果:
小结
用爬虫收集二手房数据丨Python基础实战系列(5)
就到这啦,在学爬虫的老铁记得持续关注!阿星祝你早日修炼成为爬虫大佬!点我文末的名片【领取阿星精心准备的Python学习籽料~】
戳名片找我
用爬虫收集网站公开数据丨Python爬虫实战系列(5)相关推荐
- 用爬虫抓取动态加载数据丨Python爬虫实战系列(6)
提示:最新Python爬虫资料/代码练习>>戳我直达 前言 抓取动态加载数据 话不多说,开练! 爬虫抓取动态加载数据 确定网站类型 首先要明确网站的类型,即是动态还是静态.检查方法:右键查 ...
- 结构化数据丨Python爬虫基础入门系列(7)
提示:文末有福利!最新Python爬虫资料/学习指南>>戳我直达 文章目录 前言 JSON 1. json.loads() 2. json.dumps() 3. json.dump() 4 ...
- Urllib2库丨Python爬虫基础入门系列(12)
提示:文末有福利!最新Python爬虫资料/学习指南>>戳我直达 文章目录 前言 Urllib2库 学习目的 urlopen GET请求方式 利用urllib2.Request类,添加He ...
- 抓取安居客二手房经纪人数据,python爬虫自动翻页
为什么80%的码农都做不了架构师?>>> 和链接不一样,安居客网站里面没有找到总页数,可能在json里面有,只是我没有找到. 基于此能不能做网页的循环爬取呢. 能否判断页面读取 ...
- python爬取大众点评评论_python爬虫抓取数据 小试Python——爬虫抓取大众点评上的数据 - 电脑常识 - 服务器之家...
python爬虫抓取数据 小试Python--爬虫抓取大众点评上的数据 发布时间:2017-04-07
- python大数据招聘信息_2017招聘大数据丨Python需求增速达174%,AI人才缺口超百万!...
原标题:2017招聘大数据丨Python需求增速达174%,AI人才缺口超百万! 看了Boss直聘发布的<2017互联网人才趋势白皮书>,奇小酷只有一句话要说,新的一年,希望大家火的像Py ...
- python爬虫知网实例-33个Python爬虫项目实战(推荐)
今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...
- python爬虫是干嘛的?python爬虫能做什么?
python爬虫可以用于收集数据,爬虫是一个爬虫程序,一个程序的运行速度是非常快的,而且不会因为重复的事情感到疲倦,接下来我们一起学习python爬虫是干嘛用的,python爬虫究竟能做什么呢?pyt ...
- 网络爬虫是什么?怎么学python爬虫
网络爬虫又称网络蜘蛛.网络机器人,它是一种按照一定的规则自动浏览.检索网页信息的程序或者脚本.网络爬虫能够自动请求网页,并将所需要的数据抓取下来.通过对抓取的数据进行处理,从而提取出有价值的信息. 认 ...
最新文章
- WinDbg 调试命令记录二 (基础CLR查看)
- centos下升级glib
- linux系统查看当前安装字库,linux下怎样安装中文字体?
- 记安卓屏固件升级步骤
- 汝把公司搞死了,不批汝批谁?
- 使用JAVA基础语法做一个简易的发票管理系统
- Cisco Packet Tracer思科模拟器中无线网络的基本配置
- html表格里面嵌入按钮,bootstarp-table表格中嵌套多个BUTON按钮实现
- 服务器两广豪杰维护,逆水寒11月22日更新到几点 世界boss即将掉落逆水之寒
- 宏正自动科技推出首款触摸屏LCD KVM多电脑切换器
- Python代码画圣诞树--turtle绘图
- Java多线程socket网络协议传输
- 龙芯1D处理器用户手册
- 偏安一隅的SaaS客服机会在哪,难点又在哪?
- 常用图标素材分享网站
- JavaWeb学习:session
- Ubuntu 搜狗输入法显示繁体,一直不显示简体
- 格式工厂绿色便携版,无需安装直接运行,专注视频格式转换软件
- Au2021安装教程,Audition2021安装教程
- TIVA-TM4C123GH6PM的输入边沿计时模式的配置
热门文章
- grep,sed,awk练习
- Waiting for application to come online: com.example.andyyuan.androidmui.test | com.example.andyyuan.
- 京东X未来餐厅正式开业,无界零售布局再进一步
- comsol官方案例学习——轴对称瞬态传热
- hbase_数据备份(导入/导出)
- 计算机毕业设计系列基于SSM的网上书城系统
- 喜报|中新赛克OceanMind独家赞助的DSE期刊被ESCI收录
- viroblast搭建blast网页
- Openmeetings开源视频部署
- 电压比较器采样电路调试