lxml库-腾讯招聘信息爬虫练习(1)

lxml库-腾讯招聘爬虫练习(1)

大家好!我是Jason。一名爬虫新人。
今天,我的爬虫练手小题目是——lxml.xpath爬取腾讯招聘的详细信息【第一期】。

lxml库的安装

我用的是python3,在cmd(命令指示符)中输入以下指令即可

pip install lxml

如果出现安装问题的话,论坛里面有很多朋友分享的安装过程讲解的很详细,大家可以去搜一搜。这里就不过多赘述了。

xpath的基础语法

动手之前,肯定要了解一下xpath的基础语法。请看下表

表达式 描述
// 从全局节点选择节点
@ 选择某个节点的属性值
/ 如果是在最前面,代表从根节点选取。否则选择某节点下的某个节点

说这些定义的东西有点空,在项目里跟大家再讲一讲。
——暂时写这么多,因为完成这个小题目只需要这几个(当然,第一次发博,我一个新人没总结好,抱歉了。)

分析url和页面

因为我是个爬虫新人,我目前对爬虫的理解是:首先第一步爬虫之前必须要做的是分析url和页面结构。

  1. 分析url

我们来看看腾讯招聘的url
lxml库-腾讯招聘信息爬虫练习(1)
↑这是腾讯社会招聘的第一页,红色箭头留意一下

lxml库-腾讯招聘信息爬虫练习(1)
↑这是腾讯社会招聘的第二页,红色箭头留意一下

两个图的红色箭头大家看到有什么规律来?
没错,如果你数过腾讯社会招聘第一页的招聘岗位数量,你就会发现,一页的内容刚好是10个。

  1. 分析页面结构

lxml库-腾讯招聘信息爬虫练习(1)
↑蓝色标号是我们接下来分析的步骤

  1. 我们爬取网页肯定要一页一页的按顺序爬取(这个好像有点废话了-.-)
  2. 爬取到一页后,接下来就要逐个点击页面内的10个岗位信息,因为具体的职位信息内容都在里面;

讲到这里,我们先将这几步的思路实现再继续下去。

代码

上代码前,还有些内容需要讲一讲——

headers是头部信息。爬取网页的话,添加了头部信息可以应付大多数网页的反爬技术。
那么headers内的‘User-Agent’和’Referer’,如何获取呢。看下图

lxml库-腾讯招聘信息爬虫练习(1)
↑获取右侧一栏,可以直接在需要打开的页面点击键盘的F12,或者在页面的空白处-右键->选择‘检查’。
然后按图上数字标注的步骤就可以了。(如果1步骤发现没有任何东西,可以刷新页面一下,刷新后就有内容了。

lxml库-腾讯招聘信息爬虫练习(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和页面】的第一步,我们需要将12345……等等几个页面“点击”一遍的话,我们就需要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语法。
首先讲这个前,我们有点前置步骤要做。如下图
lxml库-腾讯招聘信息爬虫练习(1)
↑大家按箭头步骤,依次点击,应该就能获得这个界面(上图红箭头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。而且,这篇博客的内容也相当长,留点空间大家互相学习。(我会回来填坑的。)我也很期待有大神润色一下我这个新人的代码。
我们下次再见~