上一篇文章講述了一下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)
結果爲
以上就是獲取文本的幾種方法