上一篇文章讲述了一下scrapy框架的安装与简单使用,今天呢,就基于scrapy框架来给大家讲述一下如何获取网页标签中的全部文本。
首先创建一个scrapy框架项目,至于如何创建,不知道的小伙伴们请看我的上一篇文章。
目标是百度贴吧,目标网址:https://tieba.baidu.com/p/4685013359
要求是获取发的帖子,当然只要文本。
打开爬虫文件,开始爬取内容
# -*- coding: utf-8 -*-
import scrapy
import re
class XiaoshuospiderSpider(scrapy.Spider):
name = 'xiaoshuoSpider'
allowed_domains = ['tieba.baidu.com']
start_urls = ['https://tieba.baidu.com/p/4685013359']
def parse(self, response):
爬取内容,有四种方式
1.使用正则去掉标签内容中的标签,只留下文本
# 找到每一层帖子
floor_list = response.xpath('//div[@class="l_post l_post_bright j_l_post clearfix "]')
for floor in floor_list:
# 找到存放帖子内容的标签
content_list = floor.xpath('.//div[@class="d_post_content j_d_post_content "]').extract()[0]
# 正则 匹配以下内容 \s 空格 \n换行 <.*?>所有的标签
pattern = re.compile(r'\s|\n|<.*?>', re.S)
#将匹配到的内容用空替换,即去除匹配的内容,只留下文本
content = pattern.sub('', content_list)
print(content)
content_list输出的结果为下图,使用正则去除标签,空格,换行等
结果为
2. /text()和//text()
# 获取标签下的文本
content_list = response.xpath('//div[@class="d_post_content j_d_post_content "]/text()').extract()
content = ''
for value in content_list:
content += value.strip(' ')
print(content)
结果为
在这里使用/text()与//text()的结果相同,因为包含内容的标签下的子标签当中没有文本
/text()获取标签的文本, //text()获取标签以及子标签下的文本
3.使用xpath('string(.)'),这种方式用来获取所有文本并拼接
floor_list = response.xpath('//div[@class="l_post l_post_bright j_l_post clearfix "]')
for floor in floor_list:
content= floor.xpath('.//div[@class="d_post_content j_d_post_content "]').xpath('string(.)').extract()[0]
content = content.strip(' ')
print(content)
结果为
4.获取最外面标签,遍历所有子标签,获取标签文本
floor_list = response.xpath('//div[@class="l_post l_post_bright j_l_post clearfix "]')
for floor in floor_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)
结果为
以上就是获取文本的几种方法