模块安装 :
pip install lxml
xpath的解析原理
etree对象的实例化
xpath方法返回的永远是一个列表
在xpath表达式中最最侧的 / 表示的含义是说,当前定位的标签必须从根节点开始进行定位
xpath表达式中最左侧的 // 表示可以从任意位置进行标签定位
xpath表达式中非最左侧的 // 表示的是多个层级的意思
xpath表达式中非最左侧的 / 表示的是一个层级的意思
属性定位://tagName[@arrtName='value']
索引定位://tagName/li[3]
定位条件可以多个,使用| 分开
from lxml import etree
tree = etree.parse('./test.html')
tree.xpath('/html/head/meta')[0] #绝对路径
tree.xpath('//meta')[0] #相对路径,将整个页面源码中所有的meta进行定位
#属性定位
tree.xpath('//div[@class="song"]')
#索引定位
tree.xpath('//div[@class="tang"]/ul/li[3]') #该索引是从1开始
#取文本
tree.xpath('//p[1]/text()')
#取属性
tree.xpath('//a[@id="feng"]/@href')
tree = etree.parse('./test.html')
tree.xpath('/html/head/meta')[0] #绝对路径
tree.xpath('//meta')[0] #相对路径,将整个页面源码中所有的meta进行定位
#属性定位
tree.xpath('//div[@class="song"]')
#索引定位
tree.xpath('//div[@class="tang"]/ul/li[3]') #该索引是从1开始
#取文本
tree.xpath('//p[1]/text()')
tree.xpath('//div[@class="song"]//text()')
#取属性
tree.xpath('//a[@id="feng"]/@href')
# 多个条件
div.xpath('./div[1]/a[2]/h2/text() | ./div[1]/span[2]/h2/text()')[0]
取文本:
取属性直:
from lxml import etree
headers = { # 反扒策略
'User-Agent':',
'cookie':''
}
url = 'https://www.zhipin.com/job_detail/?query=python%E7%88%AC%E8%99%AB&city=101010100&industry=&position='
page_text = requests.get(url,headers=headers).text
#数据解析
tree = etree.HTML(page_text)
li_list = tree.xpath('//div[@class="job-list"]/ul/li')
for li in li_list:
detail_url = 'https://www.zhipin.com'+li.xpath('.//div[@class="info-primary"]/h3/a/@href')[0]
job_title = li.xpath('.//div[@class="info-primary"]/h3/a/div/tex t()')[0]
salary = li.xpath('.//div[@class="info-primary"]/h3/a/span/text()')[0]
company = li.xpath('.//div[@class="info-company"]/div/h3/a/text()')[0]
#对详情页的url发请求解析出岗位职责
detail_page_text = requests.get(detail_url,headers=headers).text
tree = etree.HTML(detail_page_text)
job_desc = tree.xpath('//div[@class="text"]//text()')
job_desc = ''.join(job_desc)
print(job_title,salary,company,job_desc)
乱码处理
对获取到的内容先编码再转码:
img_name = img_name.encode('iso-8859-1').decode('gbk')
手机扫一扫
移动阅读更方便
你可能感兴趣的文章