Python爬虫通过xpath如何获取br后的内容

python爬虫如何通过xpath获取br后的文本内容

文章目录


前言

昨天在完成作业时,用selenium库抓取古诗文网时,抓取不到br标签后的文本,CS了很久很久,最后总结了前辈们的思路,解决了我的问题,希望给大家带来一点解决思路


一、为什么xpath爬取不到br标签后的内容?

这是因为br标签可以表示数据的开始,也可以表示数据的结束。

二、解决步骤

1.完整代码

代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from lxml import etree


# 爬取古诗文网的标题和古诗
def spider_gsww():
    service = Service('./chromedriver-win64/chromedriver.exe')
    driver = webdriver.Chrome(service=service)
    driver.get('https://www.gushiwen.cn/')
    e = etree.HTML(driver.page_source)
    title = e.xpath("//div[@class='left']/h1/a/text()")
    print("---------网站信息标题----------\n")
    print(f'\t\t{title[0]}\n')
    names = e.xpath("//b/text()")
    ups = e.xpath("//p[@class='source']/a/img/@alt")
    songs = e.xpath("//div[@class='contson']")        #1
    texts = e.xpath("//div[@class='contson']/p")
    count = 1
    for n, up, s, t in zip(names, ups, songs, texts):
        print(f'标题:{n}, 诗人:{up} \n')
        if count % 2:
            print("".join(s.xpath('text()')))        #2
        else:
            print("".join(t.xpath('text()')))
        count += 1
    driver.quit()


if __name__ == '__main__':
    spider_gsww()

2.解决代码

代码如下:

songs = e.xpath("//div[@class='contson']/text()")         #错误示范,下面为正确的示范

songs = e.xpath("//div[@class='contson']")        #先获取到目标的上一级位置
for s in songs:                                   #通过for循环遍历变量中存储的每个选定元素
        print("".join(s.xpath('text()')))         # "".join(...):将 XPath 表达式选择的文本内容联接到单个字符串中。该方法将可迭代对象的所有元素联接到单个字符串中。空字符串用作分隔符,这意味着文本内容之间将没有任何空格或其他字符(替换br标签)。


成功展示:

总结

br标签的作用是在文本中换行,它与python中换行符\n作用比较相似,每一次的出现都代表一次换行。同时,它也是一个空元素(只有一个开始标签,没有结束标签,没有元素内容)。

所以我们可以先遍历目标变量,然后用""空字符串为分隔符,去替换br标签,最后用join方法去连接字符串。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值