python爬虫编程实践 Task2--学习Xpath(实战:提取丁香园论坛的回复内容)

学习xpath

学习目标:

  1. 学习xpath,使用lxml+xpath提取内容。

  2. 使用xpath提取丁香园论坛的回复内容。

  3. 抓取丁香园网页:http://www.dxy.cn/bbs/thread/626626#626626

Xpath常用的路径表达式:

1.XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
2.在XPath中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。
3.XML文档是被作为节点树来对待的。

XPath使用路径表达式在XML文档中选取节点。节点是通过沿着路径选取的。下面列出了最常用的路径表达式:

  • nodename 选取此节点的所有子节点。

  • / 从根节点选取。

  • // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

  • . 选取当前节点。

  • … 选取当前节点的父节点。

  • @ 选取属性。

  • /text() 提取标签下面的文本内容,如:

    • /标签名 逐层提取
    • /标签名 提取所有名为<>的标签
    • //标签名[@属性=“属性值”] 提取包含属性为属性值的标签
    • @属性名 代表取某个属性名的属性值
  • 详细学习:https://www.cnblogs.com/gaojun/archive/2012/08/11/2633908.html

使用lxml解析

  • 导入库:from lxml import etree

  • lxml将html文本转成xml对象

    • tree = etree.HTML(html)
  • 用户名称:tree.xpath(’//div[@class=“auth”]/a/text()’)

  • 回复内容:tree.xpath(’//td[@class=“postbody”]’) 因为回复内容中有换行等标签,所以需要用string()来获取数据。

  • Xpath中text(),string(),data()的区别如下:

    • text()仅仅返回所指元素的文本内容。
    • string()函数会得到所指元素的所有节点文本内容,这些文本讲会被拼接成一个字符串。
    • data()大多数时候,data()函数和string()函数通用,而且不建议经常使用data()函数,有数据表明,该函数会影响XPath的性能。

实战:提取丁香园论坛的回复内容

# 导入库
from lxml import etree
import requests

url = "http://www.dxy.cn/bbs/thread/626626#626626"

1.获取url的html

req = requests.get(url)
html = req.text
html

在这里插入图片描述
2.lxml解析html

tree = etree.HTML(html) 
tree

在这里插入图片描述
3.利用Xpath表达式获取user和content(完成xpath的语句)

user = tree.xpath('//div[@class="auth"]/a/text()')
print(user)
content = tree.xpath('//td[@class="postbody"]')
print(content)

在这里插入图片描述
4. 保存爬取的内容

results = []
for i in range(0, len(user)):
    # print(user[i].strip()+":"+content[i].xpath('string(.)').strip())
    # print("*"*80)
    # 因为回复内容中有换行等标签,所以需要用string()来获取数据
    results.append(user[i].strip() + ":  " + content[i].xpath('string(.)').strip())  # strip()删除开头或是结尾的字符
# 打印爬取的结果
for i,result in zip(range(0, len(user)),results):
    print("user"+ str(i+1) + "-" + result)
    print("*"*100)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值