Python爬虫时获取标签内全部文本内容的四种方式

您所在的位置:网站首页 python文本标签 Python爬虫时获取标签内全部文本内容的四种方式

Python爬虫时获取标签内全部文本内容的四种方式

2023-09-06 11:24| 来源: 网络整理| 查看: 265

    前文提到了Python爬虫框架之一的——Scrapy框架安装和相关命令的简单使用,熟悉了起码的实用流程。今天我们进行一些细节上的总结。如题,在我们要获取目标文本所在的标签时,通常有几种方法,下面我们挨个举例说明各种用法的使用:

    以百度贴吧小说吧中的一篇小说为例,我们开始进行爬虫举例,该小说链接为:https://tieba.baidu.com/p/5702862812?pn=1

首先,我们先获取到每一楼的文本标签,代码如下:

# -*- coding: utf-8 -*- import scrapy class TbspiderSpider(scrapy.Spider): name = 'tbSpider' allowed_domains = ['tieba.baidu.com'] start_urls = ['https://tieba.baidu.com/p/5702862812?pn=1'] def parse(self, response): # 找到包含每一页的完整内容的标签 page = response.xpath('//div[@class="l_post l_post_bright j_l_post clearfix "]') # 遍历找到的标签 for content in page: # 找到每一楼的文本内容,最后放在一个列表中 content_list = content.xpath('.//div[@class="d_post_content j_d_post_content "]').extract() print('/**********---------++++++++++++++*******/-------------') print(content_list)

获取到的内容部分结果如下图所示:

由上图可见,获得文本中包含有很多空格和标签,内容杂乱,下面我们开始进行文本内容处理:

1. 使用正则进行处理:

for content in page: # 找到每一楼的文本内容,最后放在一个列表中 content_list = content.xpath('.//div[@class="d_post_content j_d_post_content "]').extract()[0] # 使用正则表达式匹配找到的文本内容中的所有s 空格 \n换行 和 所有的标签 pattern = re.compile(r'\s|\n|', re.S) # 将匹配到的内容用空替换,即可以达到去除无关内容只留下文本的目的 content_list = pattern.sub('', content_list) print('/**********---------++++++++++++++*******/-------------') print(content_list)

运行后得到如下结果,图中的空格换行和多余的标签都没有了,处理成功.

2. /text()和//text()

/text()和//text()用法一样,都是在获得标签后面写上即可,不过/text()获取的是标签的文本内容,  //text()获取标签以及子标签下的文本内容.以/text()为例,具体实现代码如下:

content_list = response.xpath('//div[@class="d_post_content j_d_post_content "]/text()').extract() print(content_list)

运行结果如下:

3. 使用string('.')

实现代码为:

page_list = response.xpath('//div[@class="l_post l_post_bright j_l_post clearfix "]') for floor in page_list: content = floor.xpath('.//div[@class="d_post_content j_d_post_content "]').xpath('string(.)').extract()[0] content = content.strip(' ') print(content)

效果如下图所示:

4.  便利标签,获取文本

实现代码如下:

list = response.xpath('//div[@class="l_post l_post_bright j_l_post clearfix "]') for floor in list: content_list = floor.xpath('.//div[@class="d_post_content j_d_post_content "]/text()').extract() content = '' for value in content_list: content += value.strip(' ') print(content)

思路比较简单,遍历所有的标签并从中获取文本,利用字符串的拼接将文本都拼接起来.运行结果如下所示:

总结:使用正则时获取内容比较慢,但是比较美观而且内容处理方便.剩下三种虽然比正则快,但是效果没有正则好,需要后续使用replace()等方法再次进行内容处理,比较麻烦.可以根据情况选择合适的方法进行文本内容获取.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3