【Python爬虫学习实践】基于Xpath和lxml库解析网站

news/2024/5/20 11:31:59/文章来源:https://blog.csdn.net/weixin_34184561/article/details/94043042

在之前的学习笔记中,介绍了Xpath语法规则和lxml库的基本使用,同时也列举出了一部分示例代码。为了更加深入地学习和运用好这两大工具,下面以爬取Tencent招聘网站职位信息为实例介绍在实践中基于Xpath和lxml库编写爬虫的基本流程和方法。

Tencent招聘网址:https://hr.tencent.com/

image

进入网站后,我们来浏览一下社会招聘一栏,并输入搜索关键字为’python’,之后方可进入如下页面:

image

此后,在爬取前,我们先任意选择一个职位进入职位详情页,分析一下我们所要爬取的信息有哪些。在如下详情页中我们可以看到欲获取的信息有职位名称、工作地点、职位类别、招聘人数、工作职责和要求。

image

这么一来,爬取需求就已经明确,那么接下来就是分析爬取过程。回顾一下,我们是如何进入职位详情页——在社会招聘先输入关键字后进入职位列表页,然后点击一个职位,浏览器便打开了一个新的url地址,而这也就是职位详情页。因此总体过程是:发送请求获取职位列表页,然后从列表中检索每一个职位详情页的url,再发送新的请求进入详情页,此后便可开展信息提取工作。

第一部分——获取职位详情页url

通过上述分析知,职位详情页url蕴含在职位列表中,所以我们先从职位列表页分析。我们要爬取的是所有职位信息,而这些职位是分布在不同的组(页)中,因此我们先依次点击几页看看这些不同页的url都有什么关联。

经实践后得到如下URL

第2页:https://hr.tencent.com/position.php?lid=&tid=&keywords=python&start=10#a

第3页:https://hr.tencent.com/position.php?lid=&tid=&keywords=python&start=20#a

第4页:https://hr.tencent.com/position.php?lid=&tid=&keywords=python&start=30#a

这里我们可以发现其URL是有一定规律的,它们的大体构成都相同,只是参数start的值不同。经分析后我们可以知道其实start代表的是当前显示职位列表在全部职位中的起始序号,这个与每页显示的职位个数有关,比如每页显示10条,第2页起始为10,那么第3页起始就是10+10=20,第4页就是20+10=30……如此一来,我们就基本上找到了URL的构成法,那么是不是都这样的呢?以第1页为例,按照我们的分析,第1页URL中应该对应的是10-10=0,我们从其他页点击第1页来验证一下,结果发现确实是0,也印证了我们推测的正确性。考虑到后面锚点’#a’对请求无关紧要,因此职位列表URL结构为:’https://hr.tencent.com/position.php?lid=&tid=&keywords=python&start={}’

在此之后我们便可以结合之前学习的Xpath与lxml来获取相应的URL信息。这里我们要注意一点的是在获取href属性时,我们检查元素发现其前面没有域名,同上分析详情页URL我们可以得知其构成法为’域名+href’,故在获取href后需要做适当修改。

image

## 获取职位详情页URL
import requests
from lxml import etree# 设置请求头
HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'
}# 设置域名
BASE_DOMAIN = 'https://hr.tencent.com/'# 定义获取详情页URL函数
def get_detail_page(url):response = requests.get(url, headers=HEADERS)html = etree.HTML(response.content.decode('utf-8'))urls = html.xpath('//table[@class="tablelist"]//tr[@class="even" or @class="odd"]//a/@href')detail_page = list(map(lambda url: BASE_DOMAIN + url, urls))return detail_page

第二部分——职位详细解析

在获取了每一个职位详情页url后,便可再次发送请求以获取数据。经分析发现数据都存放在了一个table标签里,我们便可先获取这个标签,然后在使用Xpath来解析其他数据。这里解析方法和之前一样,也相对比较简单,这里不再叙述。

image

## 解析详情页面数据
def parse_page(url):response = requests.get(url, headers=HEADERS)html = etree.HTML(response.content.decode('utf-8'))infotable = html.xpath('//table[contains(@class,"tablelist")]')[0]info = {'title': infotable.xpath('.//td[@id="sharetitle"]//text()')[0],'address': infotable.xpath('.//tr[2]/td[1]//text()')[1],'category': infotable.xpath('.//tr[2]/td[2]//text()')[1],'number': infotable.xpath('.//tr[2]/td[3]//text()')[1],'responsibility': ''.join(infotable.xpath('.//tr[3]//ul//text()')),'requirement': ''.join(infotable.xpath('.//tr[4]//ul//text()'))}return info

第三部分——爬虫集成

其实这一部分并不是一个独立的部分,只是运用上述两部分的方法集成为了一个Spider函数供封装使用。

## 爬虫集成
def Spider():BASE_URL = 'https://hr.tencent.com/position.php?lid=&tid=&keywords=python&start={}'jobs = []for index in range(0, 53): #职位列表页数url = BASE_URL.format(index * 10)
        #获取详情页URLdetails_urls = get_detail_page(url)for page_url in details_urls: 
            #对单独的详情页进行解析info = parse_page(page_url)jobs.append(info)print(info) #为方便显示结果,直接在次进行输出

这么一来,我们便可以在主程序中直接调用Spider()函数实现Tencent招聘职位信息的获取,部分结果如下:

image

以上便是利用Xpath和lxml爬取数据的一个小小实践,主要是为了加深对上述两个工具的理解和运用,其实,这里面还有很多可以完善的地方,如数据的永久化存储以及多进程爬虫等,而这些都还需要后续的多多学习与练习。


转载于:https://www.cnblogs.com/Unikfox/p/9671239.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_810544.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于django的视频点播网站开发-step15-项目部署

项目部署是一个比较大的工程,但这是笔者最喜欢的一个环节,因为在部署过程中,会遇到很多疑难问题,这些问题能促使我学到很多很多的技术。 项目部署,顾名思义,就是将自己的程序存放到远程服务器上面&#xff…

使用Quasar设计Material和IOS风格的响应式网站

GITHUB:使用Quasar设计旅游网站文章链接:使用Quasar设计Material和IOS风格的响应式网站 Quasar Quasar是一款基于Vue.js开发的UI框架,可以让你轻松构建网站简洁明快的界面,更重要的是它还能让你轻松做好RWD(响应式网站…

关于网站架构设计的知识

网站架构,一般认为是根据客户需求分析的结果,准确定位网站目标群体,设定网站整体架构,规划、设计网站栏目及其内容,制作网站开发流程及顺序,以最大限度地进行高效资源分配与管理的设计。其内容有程序架构&a…

java验证码的实现原理_web技术开发:网站的验证码的验证原理是什么?怎么实现的?...

src链接到生成验证码图片的servlet应用于数据回显CheckImgServletpackage com.huanfeng.cn;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.BufferedReader;import jav…

建立php的网站配置文件,网站的搭建流程,lnmp环境网站目录以及配置文件,安全等介绍!...

上节我们教了大家linux系统php环境的安装,这里我简单的教大家怎么配置安全,网站的根目录在哪,怎么样才能让一个网站运行起来。一个环境已经安装好了,点击ftp按钮进入ftp管理ftp管理界面可以直观的看到文件和目录等。首先是数据库的…

去哪儿网代理网站机票价格采集方案

2019独角兽企业重金招聘Python工程师标准>>> 原文作者:西安鲲之鹏 原文链接:http://http://www.site-digger.com/html/articles/20120509/33.html 去哪儿网的代理网站有自己独立的机票搜索接口,例如http://xyx.trade.qunar.com/si…

建设优质手机网站必读

在2013年底百度曾经发布了一份《2014中国网站运营发展趋势报告》,里面详细分析了目前中文网站的发展趋势,其中值得我们注意的是,报告中首次将PC端网站与移动端网站分开说明,另外一个可喜的发现是,目前在所有的网站中&a…

7个最好的文件存储网站

最近,文件越来越多,因为在不同的地方轮换上网,地方的不确定性迫使我去寻找一些高性能且免费的文件存储站点。或者,你目前有一些集体照片,需要传送给同学以及朋友,但是邮箱的附件的限制性让人霎时头痛。现在…

这10件事情,你做网站之前都有考虑吗?

2019独角兽企业重金招聘Python工程师标准>>> 1.命名尽量统一。 命名有很多地方,比如页面该如何统一命名,要是用wordpress建站,命名就该遵循wordpress的文件命名规范,比如文章页single.php,分类页category.php,搜索页se…

GCOGE技术内幕-Gcoge酷鸽传媒官方网站 Gcoge.com-酷哥一下,问题搞定!

Gcoge酷鸽传媒官方网站 Gcoge.com-酷哥一下,问题搞定!- 酷哥引擎新媒体 酷哥搜索珀利引擎-全球唯一全新概念珀利引擎新媒体--聚合优化创新 新思维 心服务~一个域名,通行天下!全球最大聚合门户!全球卓著搜索专家! 国内外著名搜索引擎聚合门户~我们的宗旨是为人民服务…

配置Nginx网站https访问、http共存访问、http强制跳转到https

最近公司一客户要求服务器与客户端之间传输内容是加密的,通过https协议访问,于是使用OpenSSL生成证书,默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译nginx时指定–with-http_ssl_module参数,需要确保机器…

成都PC网站建设需要考虑哪些费用呢

亿合科技PC建设小编分享下:成都PC网站建设需要考虑哪些费用呢?随互联网的发展,越来越多人想建设自己网站,站长最关心的问题之一就是网站建设需要多少钱。每个网站建设的费用都是不一样的,但是都需要涵盖几个方面的费用…

Linux系统的Web网站服务

实验要求:1.编译安装httpd服务器2.构建基于域名的虚拟web主机3.部署AWStats分析系统4.实现httpd服务的访问控制1.编译安装httpd服务器使用tar命令解包配置、编译、安装命令:./configure配置选项:--prefix:指定httpd服务程序的安装…

python搭建个人网站_Django快速搭建个人网站应用,源码开源

Django入门与实践应用,Python制作个人博客网站。Django是Python的高级Web框架,功能非常强大,但是你也不要被它给吓到了,其实Django搭建Web应用也非常简单,下面让小编以学习及分享的态度给大家讲一个Django入门的web应用…

现实世界的Windows Azure:专访PrivacyCentral网站创始人、CEO Zoiner Tejada

作为现实世界Windows Azure博客系列中的一部分,我联系了PrivacyCentral网站创始人、CEO Zoiner Tejada,来探寻该公司是如何利用Windows Azure平台及Ruby语言来搭建其强大的在线隐私服务。点击这里来了解PrivacyCentral的成功案例。下面我们来看看Tejada先…

多语言网站(如何实现网站的多语言版本?)

近日,公司要做一个多语言的网站,今天在网上收集资料,下面是个人觉得很不错的文章,有兴趣的朋友可以参考下: 多语言网站,顾名思义就是能够以多种语言(而不是单种语言)为用户提供信息服…

2核8g服务器可以做什么网站,2核8g云服务器可以干什么

2核8g云服务器可以干什么 内容精选换一换您可以在几分钟之内快速获得基于公有云平台的弹性云服务器设施,并且这些设施是弹性的,可以根据需求伸缩。该任务指导用户如何创建支持IB网卡的弹性云服务器,包括管理控制台方式和基于HTTPS请求的API(A…

张百川:“知道”网站安全体检初体验

昨天游侠写过一篇文章 [关于几个免费在线挂马检测网站] ,说到了北京知道创宇公司的“知道网站安全体检中心”,他们的工作人员很及时的给我发了个内测账号,这里大体说下。当然网址是 http://www.scanv.com 大家可以去申请内测账号。流程基本是…

扫描网站后门脚本(awd可用)

在awd线下赛的时候&#xff0c;可以用这个脚本来检测有没有一句话木马 脚本如下&#xff1a; <!DOCTYPE html> <html> <head><meta charsetgb2312><title>PHP web shell scan</title> </head> <body></body><?php…

asp.net基础网站(我的第一个网站)(现代软件开发技术)

我们选择的软件是vs2019&#xff0c;因为教材过时等等会有很多地方不同&#xff0c;导致浪费了很多宝贵时间&#xff0c;写下这份教程供大家学习。 首先我们随便建个项目&#xff0c;打开vs2019的编程页面&#xff0c;选择工具-获取工具和功能 在这里我们选择修改 选择左上…