上一节代码如下
代码语言:javascript复制import re
import urllib.request
class Spider(object):
def __init__(self):
# 起始页位置
self.begin_page = int(input("请输入起始页:"))
# 终止页位置
self.end_page = int(input("请输入终止页:"))
# 基本 URL
self.base_url = "http://hr.tencent.com/"
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")
return html
一、使用 lxml 库解析网页数据
代码语言:javascript复制<tr class="even">
<td class="l square"><a target="_blank" href="position_detail.php?id=49104&keywords=&tid=0&lid=0">CDG-FiT-HRBP(深圳)</a></td>
<td>职能类</td>
<td>1</td>
<td>深圳</td>
<td>2019-04-03</td>
</tr>
① 查找所有的职位详情链接。
详情链接位于 <a> 中,对应着该标签的 href 属性的值。
代码语言:javascript复制//td[@class="l square"]/a/@href
② 查找所有的职位名称。
表示职位名称的文本对应着标签 <a> 的文本。
代码语言:javascript复制//td[@class="l square"]/a/text()
③ 查找其它元素。
代码语言:javascript复制//tr[@class="even"]/td[2] | //tr[@class="odd"]/td[2]
查找招聘人数
代码语言:javascript复制//tr[@class="even"]/td[3] | //tr[@class="odd"]/td[3]
查找工作地点
代码语言:javascript复制//tr[@class="even"]/td[4] | //tr[@class="odd"]/td[4]
查找发布时间
代码语言:javascript复制//tr[@class="even"]/td[5] | //tr[@class="odd"]/td[5]
在 parse_page() 方法中实现
代码语言:javascript复制from lxml import etree
def parse_page(self, html):
# 从字符串中解析 HTML 文档或片段,返回根节点
root = etree.HTML(html)
# 查找所有的详情链接
links = root.xpath('//td[@class="l square"]/a/@href')
# 查找所有的职位名称
names = root.xpath('//td[@class="l square"]/a/text()')
# 查找所有的职位类别
categorys = root.xpath('//tr[@class="even"]/td[2] | //tr[@class="odd"]/td[2]')
# 查找所有的招聘人数
counts = root.xpath('//tr[@class="even"]/td[3] | //tr[@class="odd"]/td[3]')
# 查找所有的工作地点
locations = root.xpath('//tr[@class="even"]/td[4] | //tr[@class="odd"]/td[4]')
# 查找所有的发布时间
publish_times = root.xpath('//tr[@class="even"]/td[5] | //tr[@class="odd"]/td[5]')
# 定义空列表,保存元素的信息
items = []
for i in range(0, len(names)):
item = {}
item['职位名称'] = names[i]
item['详情链接'] = self.base_url links[i]
item['职位类别'] = categorys[i].text
item['招聘人数'] = counts[i].text
item['工作地点'] = locations[i].text
item['发布时间'] = publish_times[i].text
items.append(item)