下载
浏览器插件
注意
etree创建对象时 etree.parse('本地路径') 或 etree.HTML('网上请求到的页面')
常用方法
返回值都是列表
from lxml import etree
etree = etree.parse('./测试.html')
# 属性定位
# 找class属性值为song的标签
etree.xpath('//div[@class="song"]')
# 层级索引定位 class下的ul下的第二个li中的a标签
etree.xpath('//div[@class="song"]/ul/li[2]/a')
# 逻辑定位 找到所有a标签, href属性为'' 而且 class为song的
etree.xpath('//a[@href="" and @class="song"]')
# 模糊匹配
# 所有div标签,中class包含ng这两个字眼的所有标签
etree.xpath('//div[contains(@class, "ng")]')
# 所有div下, 以ta开头的 class
etree.xpath('//div[starts-with(@class, "ta")]')
# 取文本
# 精准定位后text()取文本
etree.xpath('//div[@class="song"]/p[1]/text()')
# 将制定到位置,下所有子标签的文本获取到 //text()
etree.xpath('//div[@class="song"]//text()')
# 取属性 @属性名
etree.xpath('//div[@class="song"]//li[2]/a/@href')
段子网内容和标题解析
import requests
from lxml import etree
url = 'https://ishuo.cn/'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
}
data = requests.get(url, headers=headers).text
etree = etree.HTML(data)
# 取到包含内容和标题 Element对象可以继续用xpath继续调用
with open('./段子内容.txt', 'w', encoding='utf-8') as f:
li_list = etree.xpath('//div[@id="list"]/ul/li')
for li in li_list:
# ./代表从li开始取
title = li.xpath('./div[2]/a/text()')[0]
content = li.xpath('./div[1]/text()')[0]
f.write("【"+title+"】"+content+"\n\n")
print('数据写入完成')