上一篇使用正则表达式提取了boss直聘的数据,感觉使用正则提取HTML数据有点困难,这一节使用xpath提取数据,会简单很多。python3中可以导入lxml库来使用xpath提取数据。
首先是安装lxml:
pip install lxml
还需要安装一个插件,在此处下载对应版本
切换到下载目录
pip install 文件名
然后在python3终端中输入命令,如果没有异常,则表示安装成功
from lxml import etree
发送HTTP请求的逻辑都是一样的,就是提取数据不同:
def deal_page(self, li_list) :
"""
处理页面中的数据
:param li_list:li标签集合
"""
for li in li_list :
data = DataModel()
data.title = self.is_None(li.xpath(".//div/div[@class=\"info-primary\"]/h3/a/div[@class=\"job-title\"]/text()"))[0]
data.salary = self.is_None(li.xpath(".//div/div[@class=\"info-primary\"]/h3/a/span/text()"))[0]
data.position = self.is_None(li.xpath(".//div/div[@class=\"info-primary\"]/p/text()[1]"))[0]
data.working_life = self.is_None(li.xpath(".//div/div[@class=\"info-primary\"]/p/text()[2]"))[0]
data.education = self.is_None(li.xpath(".//div/div[@class=\"info-primary\"]/p/text()[3]"))[0]
data.company_name = self.is_None(li.xpath(".//div/div[@class=\"info-company\"]/div/h3/a/text()"))[0]
data.company_type = self.is_None(li.xpath(".//div/div[@class=\"info-company\"]/div/p/text()[1]"))[0]
if li.xpath(".//div/div[@class=\"info-company\"]/div/p/text()[3]") :
data.financing_info = self.is_None(li.xpath(".//div/div[@class=\"info-company\"]/div/p/text()[2]"))[0]
data.staff_numbers = self.is_None(li.xpath(".//div/div[@class=\"info-company\"]/div/p/text()[3]"))[0]
else :
data.financing_info = "".encode("utf-8")
data.staff_numbers = self.is_None(li.xpath(".//div/div[@class=\"info-company\"]/div/p/text()[2]"))[0]
data.recruiter_name = self.is_None(li.xpath(".//div/div[@class=\"info-publis\"]/h3/text()[1]"))[0]
data.recruiter_job = self.is_None(li.xpath(".//div/div[@class=\"info-publis\"]/h3/text()[2]"))[0]
data.release_time = self.is_None(li.xpath(".//div/div[@class=\"info-publis\"]/p/text()"))[0]
self.data_list.append(data)
def is_None(self, obj):
"""
判断xpath获取的对象取值是否为空
:param obj: xpath获取的对象
"""
return obj if (obj) else [""]