爬取腾讯社会招聘网站的招聘信息,包括职位名称、职位类别、招聘人数、工作地点、发布时间、以及每个职位详情的链接。
一、 分析要解析的数据
第一个职位所在的标签 <a>,该标签中既有属性,又有文本。
每个职位详情的链接(后半部分)。如果要了解职位的详情,需要在 href 属性值的前面加上 http://hr.tencent.com/,拼接成一个完整的链接。
表示职位的名称。
再查看其它相邻的标签 <td>,可以发现,这些标签所对应的文本分别表示“职位类别”、“招聘人数”、“工作地点”、“发布时间”。因此,只要拿到这些标签的文本,就能拿到想要的数据。
还可以查看其它标签的内容,以确认所要解析的数据。查看下一个标签 <tr class="odd">,该标签的内容对应着第二条招聘信息。因此,<tr class="even"> 和 <tr class="odd"> 标签中的文本和 href 属性都是要筛选出来的数据。
二、 使用 urllib 库爬取社招网数据
创建一个 spider.py 文件,在文件中定义一个负责爬取网页的类 Spider,只要调用 Spider 对象的方法,就可以将招聘网站的 HTML 爬取下来。
可以发现,start 参数的初始值为 0,之后每增加一页就递增 10,按照这个规律,要想爬取所有页面的内容,可以将 URL 表示为:
"http://hr.tencent.com/position.php?&start=" + (页码 -1)*10 + '#a'
通过 URL 可以连续发送页面请求。
① 定义属性
在 Spider 类的 __init__() 方法中,定义表示起始页、终止页、基本 URL 的属性。
class Spider(object):
def __init__(self):
# 起始页位置
self.begin_page = int(input("请输入起始页:"))
# 终止页位置
self.end_page = int(input("请输入终止页:"))
# 基本 URL
self.base_url = "http://hr.tencent.com/"
② 发送爬取网页的请求
在 Spider 类中,定义一个用于发送请求的方法 load_page()。在 load_page() 方法中,准备好请求头和完整的 URL,接着使用 urllib 库获取服务器返回的网页源代码。
# 定义一个 url 请求网页的方法
# page 需要请求的参数
def load_page(url):
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
for page in range(self.begin_page, self.end_page + 1):
url = self.base_url + "position.php?&start=" + str((page -1)*10 + "#a")
request = urllib.request.Request(url, headers=headers)
# 获取每页 HTML 源代码字符串
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8")