Python爬虫时获取标签内全部文本内容的四种方式 |
您所在的位置:网站首页 › python文本标签 › Python爬虫时获取标签内全部文本内容的四种方式 |
前文提到了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 |