# 项目需求:利用Xpath 获取段子的内容和作者 https://ishuo.cn/joke import requests from lxml import etree
# 指定url url='https://ishuo.cn/joke' headers={ "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" }
# 发起页面请求 response=requests.get(url=url,headers=headers)
# 获取页面内容 page_text= response.text
# 数据解析 tree=etree.HTML(page_text) # 获取所有的内容标签 用插件先测试语法 # xpath()函数返回的是列表,列表元素是element对象,可以继续调用xpath函数继续解析 # ./ 表示标签下
li_list = tree.xpath('//*[@id="list"]/ul/li')
#持久化存储 with open('./duanzi.txt','w',encoding='utf-8') as f: for li in li_list: content = li.xpath('./div[@class="content"]/text()')[0] title = li.xpath('./div[@class="info"]/a/text()')[0] f.write(title+":"+content+"nn") print('完成')
小结:
- xpath返回的是列表,索引取值
- 内容来源于网络用etree.HTML(),本地用etree.parse()
- 生成树之后xpath解析之后是element对象,还可以继续xpath
- 注意xpath常用语法编写,可以利用插件先测试
- 不要忘了./ title = li.xpath('./div[@class="info"]/a/text()')[0]
### 常用xpath表达式回顾 属性定位: #找到class属性值为song的div标签 //div[@class="song"] 层级&索引定位: #找到class属性值为tang的div的直系子标签ul下的第二个子标签li下的直系子标签a //div[@class="tang"]/ul/li[2]/a 逻辑运算: #找到href属性值为空且class属性值为du的a标签 //a[@href="" and @class="du"] 模糊匹配: //div[contains(@class, "ng")] //div[starts-with(@class, "ta")] 取文本: # /表示获取某个标签下的文本内容 # //表示获取某个标签下的文本内容和所有子标签下的文本内容 //div[@class="song"]/p[1]/text() //div[@class="tang"]//text() 取属性: //div[@class="tang"]//li[2]/a/@href
from lxml import etree
# 1创建etree对象进行指定数据解析 tree = etree.parse('./text.html')
# 2调用xpath –》属性定位 #tree.xpath('//div[@class="song"] ') —-tree.xpth()—>列表
# 3层级索引定位 #tree.xpath('//div[@class="tang"]/ul/li[2]/a')
# 4逻辑定位 #找到href属性值为空且class属性值为du的a标签 #tree.xpath('//a[@href="" and @class="du"]')
# 5模糊匹配 # class 中有ng字符 #tree.xpath('//div[contains(@class, "ng")]') #tree.xpath('//div[starts-with(@class, "ta")]')
# 6取文本 # /表示获取某个标签下的文本内容
#tree.xpath('//div[@class="song"]/p[1]/text()')
# //表示获取某个标签下的文本内容和所有子标签下的文本内容 #tree.xpath('//div[@class="tang"]//text()')
# 7取属性 tree.xpath('//div[@class="tang"]//li[2]/a/@href')
学习:
https://www.cnblogs.com/foremostxl/p/10066312.html
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试