爬虫——利用xpath插件爬取段子

489次阅读
没有评论
爬虫——利用xpath插件爬取段子

# 项目需求:利用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免费测试

相关文章:

版权声明:Python教程2022-10-25发表,共计2071字。
新手QQ群:570568346,欢迎进群讨论 Python51学习