lxml库-腾讯招聘信息爬虫练习(1)
lxml库-腾讯招聘爬虫练习(1)
大家好!我是Jason。一名爬虫新人。
今天,我的爬虫练手小题目是——lxml.xpath爬取腾讯招聘的详细信息【第一期】。
lxml库的安装
我用的是python3,在cmd(命令指示符)中输入以下指令即可
pip install lxml
如果出现安装问题的话,论坛里面有很多朋友分享的安装过程讲解的很详细,大家可以去搜一搜。这里就不过多赘述了。
xpath的基础语法
动手之前,肯定要了解一下xpath的基础语法。请看下表
表达式 | 描述 |
---|---|
// | 从全局节点选择节点 |
@ | 选择某个节点的属性值 |
/ | 如果是在最前面,代表从根节点选取。否则选择某节点下的某个节点 |
说这些定义的东西有点空,在项目里跟大家再讲一讲。
——暂时写这么多,因为完成这个小题目只需要这几个(当然,第一次发博,我一个新人没总结好,抱歉了。)
分析url和页面
因为我是个爬虫新人,我目前对爬虫的理解是:首先第一步爬虫之前必须要做的是分析url和页面结构。
- 分析url
我们来看看腾讯招聘的url
↑这是腾讯社会招聘的第一页,红色箭头留意一下
↑这是腾讯社会招聘的第二页,红色箭头留意一下
两个图的红色箭头大家看到有什么规律来?
没错,如果你数过腾讯社会招聘第一页的招聘岗位数量,你就会发现,一页的内容刚好是10个。
- 分析页面结构
↑蓝色标号是我们接下来分析的步骤
- 我们爬取网页肯定要一页一页的按顺序爬取(这个好像有点废话了-.-)
- 爬取到一页后,接下来就要逐个点击页面内的10个岗位信息,因为具体的职位信息内容都在里面;
讲到这里,我们先将这几步的思路实现再继续下去。
代码
上代码前,还有些内容需要讲一讲——
headers是头部信息。爬取网页的话,添加了头部信息可以应付大多数网页的反爬技术。
那么headers内的‘User-Agent’和’Referer’,如何获取呢。看下图
↑获取右侧一栏,可以直接在需要打开的页面点击键盘的F12,或者在页面的空白处-右键->选择‘检查’。
然后按图上数字标注的步骤就可以了。(如果1步骤发现没有任何东西,可以刷新页面一下,刷新后就有内容了。
↑按上上图的操作后,应该能看到这个图了。(没有的话,不妨往下拖滚动条[大雾])
接下来可以讲代码了。
from lxml import etree
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
'Referer': 'https://hr.tencent.com/position.php?keywords=python&lid=2196&tid=87&start=10',
}
BASE_DOMAIN = 'https://hr.tencent.com/'
#注释:这里对应上文【分析url和页面】的第一步,我们需要将1,2,3,4,5……等等几个页面“点击”一遍的话,我们就需要for循环(演示的话,我们就遍历少点内容吧)
def get_page():
for x in range(5):
url = 'https://hr.tencent.com/position.php?keywords=python&lid=2196&tid=87&start=%d0#a' %x
parse_page(url)
#注释:这里对应上文【分析url和页面】的第二步,分析页面十个岗位对应的链接
def parse_page(url):
response = requests.get(url,headers=headers)
content = response.content.decode('utf-8')
html = etree.HTML(content)
detail_urls = html.xpath('//td[@class="l square"]/a/@href')
for detail_url in detail_urls:
get_url = BASE_DOMAIN + detail_url
print(get_url)
if __name__ == '__main__':
get_page()
代码内容注释和补充
1.
在上文代码中方法parse_page()下有以下代码,这是让程序去解析你的网页。
response = requests.get(url,headers=headers)
content = response.content.decode('utf-8')
html = etree.HTML(content)
不过里面的这有个小知识点,我们下次聊。(-.-)
content = response.content.decode('utf-8')
2.
detail_urls = html.xpath('//td[@class="l square"]/a/@href')
这个就回到我们开题的xpath语法。
首先讲这个前,我们有点前置步骤要做。如下图
↑大家按箭头步骤,依次点击,应该就能获得这个界面(上图红箭头2步骤鼠标符号用好很重要)。我们重点看右边的界面。
我们知道
[WXG10-119 Foxmail Windows开发工程师(广州)]
这个信息在tr class="even"标签下的td class="l square"标签下的a target="_blank"中(可能有点绕)
我们需要其中的href信息(链接),用我们的xpath语法,不妨简单粗暴的先从全局节点中选择td class="l square"标签(@选取td中class的属性值) 即得出——//td[@class=“l square”],然后我们需要的内容在a标签的href内,同理得出//td[@class=“l square”]/a/@href
【上面的内容我实在文笔有限,不知道如何更通俗的讲解】
后记
其实这个练习还没有完成,但将代码复制后也能打印出各个职位的url。而且,这篇博客的内容也相当长,留点空间大家互相学习。(我会回来填坑的。)我也很期待有大神润色一下我这个新人的代码。
我们下次再见~