提示:最新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)相关推荐

  1. 用爬虫抓取动态加载数据丨Python爬虫实战系列(6)

    提示:最新Python爬虫资料/代码练习>>戳我直达 前言 抓取动态加载数据 话不多说,开练! 爬虫抓取动态加载数据 确定网站类型 首先要明确网站的类型,即是动态还是静态.检查方法:右键查 ...

  2. 结构化数据丨Python爬虫基础入门系列(7)

    提示:文末有福利!最新Python爬虫资料/学习指南>>戳我直达 文章目录 前言 JSON 1. json.loads() 2. json.dumps() 3. json.dump() 4 ...

  3. Urllib2库丨Python爬虫基础入门系列(12)

    提示:文末有福利!最新Python爬虫资料/学习指南>>戳我直达 文章目录 前言 Urllib2库 学习目的 urlopen GET请求方式 利用urllib2.Request类,添加He ...

  4. 抓取安居客二手房经纪人数据,python爬虫自动翻页

    为什么80%的码农都做不了架构师?>>>    和链接不一样,安居客网站里面没有找到总页数,可能在json里面有,只是我没有找到. 基于此能不能做网页的循环爬取呢. 能否判断页面读取 ...

  5. python爬取大众点评评论_python爬虫抓取数据 小试Python——爬虫抓取大众点评上的数据 - 电脑常识 - 服务器之家...

    python爬虫抓取数据 小试Python--爬虫抓取大众点评上的数据 发布时间:2017-04-07

  6. python大数据招聘信息_2017招聘大数据丨Python需求增速达174%,AI人才缺口超百万!...

    原标题:2017招聘大数据丨Python需求增速达174%,AI人才缺口超百万! 看了Boss直聘发布的<2017互联网人才趋势白皮书>,奇小酷只有一句话要说,新的一年,希望大家火的像Py ...

  7. python爬虫知网实例-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

  8. python爬虫是干嘛的?python爬虫能做什么?

    python爬虫可以用于收集数据,爬虫是一个爬虫程序,一个程序的运行速度是非常快的,而且不会因为重复的事情感到疲倦,接下来我们一起学习python爬虫是干嘛用的,python爬虫究竟能做什么呢?pyt ...

  9. 网络爬虫是什么?怎么学python爬虫

    网络爬虫又称网络蜘蛛.网络机器人,它是一种按照一定的规则自动浏览.检索网页信息的程序或者脚本.网络爬虫能够自动请求网页,并将所需要的数据抓取下来.通过对抓取的数据进行处理,从而提取出有价值的信息. 认 ...

最新文章

  1. WinDbg 调试命令记录二 (基础CLR查看)
  2. centos下升级glib
  3. linux系统查看当前安装字库,linux下怎样安装中文字体?
  4. 记安卓屏固件升级步骤
  5. 汝把公司搞死了,不批汝批谁?
  6. 使用JAVA基础语法做一个简易的发票管理系统
  7. Cisco Packet Tracer思科模拟器中无线网络的基本配置
  8. html表格里面嵌入按钮,bootstarp-table表格中嵌套多个BUTON按钮实现
  9. 服务器两广豪杰维护,逆水寒11月22日更新到几点 世界boss即将掉落逆水之寒
  10. 宏正自动科技推出首款触摸屏LCD KVM多电脑切换器
  11. Python代码画圣诞树--turtle绘图
  12. Java多线程socket网络协议传输
  13. 龙芯1D处理器用户手册
  14. 偏安一隅的SaaS客服机会在哪,难点又在哪?
  15. 常用图标素材分享网站
  16. JavaWeb学习:session
  17. Ubuntu 搜狗输入法显示繁体,一直不显示简体
  18. 格式工厂绿色便携版,无需安装直接运行,专注视频格式转换软件
  19. Au2021安装教程,Audition2021安装教程
  20. TIVA-TM4C123GH6PM的输入边沿计时模式的配置

热门文章

  1. grep,sed,awk练习
  2. Waiting for application to come online: com.example.andyyuan.androidmui.test | com.example.andyyuan.
  3. 京东X未来餐厅正式开业,无界零售布局再进一步
  4. comsol官方案例学习——轴对称瞬态传热
  5. hbase_数据备份(导入/导出)
  6. 计算机毕业设计系列基于SSM的网上书城系统
  7. 喜报|中新赛克OceanMind独家赞助的DSE期刊被ESCI收录
  8. viroblast搭建blast网页
  9. Openmeetings开源视频部署
  10. 电压比较器采样电路调试