爬取腾讯招聘官网

 

1.爬取目标

这次爬虫爬取的信息是腾讯官方招聘网站上的首页下的热招职位,如下图所示

2.爬取步骤

进入该页面下,观察该页面,我们爬取的信息就是下面我标出的信息页,信息页下面就是翻页区,不断翻页发现这些网页的链接后面有一定的规则

每页的链接:http://hr.tencent.com/position.php?&start=?#a    注:?就是改变的位置

 

使用requests模块获取页面信息:

1 # 请求获取网站页面的信息(html代码)  网址:http://hr.tencent.com/position.php
2 def load_request(number, items):
3     # User-Agent: 请求报头,用来把程序伪装成浏览器
4     headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Mobile Safari/537.36"}
5     # 使用requests的get请求服务器获取信息
6     request = requests.get('http://hr.tencent.com/position.php?&start='+str(number)+"#a", headers=headers)
7     # 取出返回信息的文本信息(html代码)
8     html = request.text

使用BeautifulSoup解析库对获取的页面代码进行解析,获取的页面信息其实就是上面第二张图的一页,打开浏览器的检查观察页面HTML代码的规则,每一条职位信息都在类名为even或odd的td标签内,先用select方法提取每一条信息的职位信息,再循环取每一条信息里的特定信息:

select方法使用: https://www.cnblogs.com/yizhenfeng168/p/6979339.html(转载)

 1 # 网站代码解析
 2 def parser(html, items):
 3     # soup是一个BeautifulSoup对象,把HTML代码转换成树形结构存储在soup中
 4     soup = BeautifulSoup(html, 'html.parser')
 5     # 使用BeautifulSoup中的select方法提取HTML代码中的信息
 6     even = soup.select('.even')
 7     odd = soup.select('.odd')
 8     str = odd + even   # 字符串拼接
 9     for item in str:   # for循环迭代(遍历)
10         # _item为一个字典,存储一个工作职位的信息
11         _item = {}
12         # 职位名称
13         _item['name_of_work'] = item.select('td')[0].get_text()
14         # 职位链接
15         _item['link_of_work'] = 'http://hr.tencent.com' + item.select('td a')[0].attrs['href']
16         # 职位类别
17         _item['category_of_work'] = item.select('td')[1].get_text()
18         # 工作地点
19         _item['where_of_work'] = item.select('td')[3].get_text()
20         # 发布时间
21         _item['time_of_release'] = item.select('td')[4].get_text()
22         # 所需人数
23         _item['number_of_person'] = item.select('td')[2].get_text()
24         # 把以上信息添加到列表中
25         items.append(_item)

最后写主函数,把爬取的信息以json格式存储,程序的所有代码如下:

 1 # __author__ = 'wyb'
 2 # date: 2018/1/9
 3 
 4 from bs4 import BeautifulSoup  # 导入BeautifulSoup解析库
 5 import requests    # 请求网站获取网页数据
 6 import json        # python中的一种轻量级的数据交换格式
 7 
 8 # import sys         # python中的操作系统模块
 9 # sys.getdefaultencoding()
10 
11 # 网站代码解析
12 def parser(html, items):
13     # soup是一个BeautifulSoup对象,把HTML代码转换成树形结构存储在soup中
14     soup = BeautifulSoup(html, 'html.parser')
15     # 使用BeautifulSoup中的select方法提取HTML代码中的信息
16     even = soup.select('.even')
17     odd = soup.select('.odd')
18     str = odd + even   # 字符串拼接
19     for item in str:   # for循环迭代(遍历)
20         # _item为一个字典,存储一个工作职位的信息
21         _item = {}
22         # 职位名称
23         _item['name_of_work'] = item.select('td')[0].get_text()
24         # 职位链接
25         _item['link_of_work'] = 'http://hr.tencent.com' + item.select('td a')[0].attrs['href']
26         # 职位类别
27         _item['category_of_work'] = item.select('td')[1].get_text()
28         # 工作地点
29         _item['where_of_work'] = item.select('td')[3].get_text()
30         # 发布时间
31         _item['time_of_release'] = item.select('td')[4].get_text()
32         # 所需人数
33         _item['number_of_person'] = item.select('td')[2].get_text()
34         # 把以上信息添加到列表中
35         items.append(_item)
36 
37 # 请求获取网站页面的信息(html代码)  网址:http://hr.tencent.com/position.php
38 def load_request(number, items):
39     # User-Agent: 请求报头,用来把程序伪装成浏览器
40     headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Mobile Safari/537.36"}
41     # 使用requests的get请求服务器获取信息
42     request = requests.get('http://hr.tencent.com/position.php?&start='+str(number)+"#a", headers=headers)
43     # 取出返回信息的文本信息(html代码)
44     html = request.text
45     parser(html, items)
46 
47 if __name__ == "__main__":
48     number = 0  #
49     items = []  # 列表
50     swith = True
51     while swith:
52         if number >= 50:
53             # swith相当于一个开关请示,如果请求发出,爬虫启动
54             swith = False
55         load_request(number, items)
56         # 一次性爬取10页数据
57         number += 10
58     content = json.dumps(items, ensure_ascii=False)
59     # 数据读入json中
60     with open('txzhaoping.json', 'w',encoding='utf-8') as f:
61         f.write(content)
View Code

运行程序,结果如下:

原文地址:https://www.cnblogs.com/wyb666/p/8313192.html