python爬虫三大解析数据方法:xpath 及 爬段子网案例

下载

pip install lxml

浏览器插件

插件xpath安装,XPath Helper 浏览器快捷键control+shift+x 用于测试自己的xpath是否写对了

注意

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('数据写入完成')

猜你喜欢

转载自blog.csdn.net/weixin_42329277/article/details/84074801