Python 获取网页标签中的全部文本的几种方法

上一篇文章讲述了一下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)

结果为

 

以上就是获取文本的几种方法

猜你喜欢

转载自blog.csdn.net/qq_42603652/article/details/81394872
今日推荐