爬虫---获取指定标签内的文本

以在scrapy框架抓取百度贴吧为例,介绍四种抓取文本的方式。

1. 获取最外层标签,遍历内部所有的子标签“/text()”,获取标签文本

class XiaoshuoSpider(scrapy.Spider):
    name = 'xiaoshuo'
    allowed_domains = ['tieba.baidu.com']
    start_urls = ['https://tieba.baidu.com/p/5815118868']
    f= open('content.txt','a',encoding='utf-8')
    def parse(self, response):
        div_list = response.xpath('//div[@class="l_post l_post_bright j_l_post clearfix  "]')
        for div in div_list:
            author = div.xpath('.//div[@class="louzhubiaoshi_wrap"]').getall()
            if len(author) != 0:
               content_list = div.xpath('.//div[@class="d_post_content j_d_post_content "]/text()').getall()
               content = ''
               remove = re.compile('\s')
               douhao = re.compile(',')
               for string in content_list:
                    string = re.sub(remove,'',string)
                    string = re.sub(douhao,'',string)
                    content+=string+'\n'
               print(content)
               self.f.write(content)

其中以下代码的作用是将找到的文本拼接成一个字符串,并将其中的空格和“,”去掉。将文本写入到“.content.txt”文件中。

终端中显示找到的文本如下:

写入到文件夹中的文件如:

如果contet后面不加“\n”,写入到件夹得内容就只会写入一行数据。

2. 获取最外层标签,遍历内部所有的标签,“//text()”获取本标签的文本以及它所有子标签的文本。

通过“//text()”可以直接获取指定标签的父级标签,不用直接获取本标签,就可以直接找到父级标签下的所有文本,但缺点是可能获取多余的数据。

此时终端获取到的数据是没有经过处理的,如果要得到符合的文本数据,可采取上一种方式处理数据的方法,通过遍历正则得到想要的数据,这里不再重复介绍。

3.正则去掉所有标签<.*?> re.compile.sub

先找到指定的文本标签,然后通过正则,去掉文本外的标签符号,只留下文本内容,如下。

此时的到的数据也是没经过处理的,所以要想得到符合的数据文本,要采用之前数据处理的方法,数据处理的方法多种多样,只要最后获取符合要求即可。

4.string(.)获取文本直接拼接文本

content = div.xpath('.//div[@class="p_content  "]').xpath('string(.)').get()
                print(content)
                kouge = re.compile('\s')
                content = re.sub(kouge,'',content)+'\n'
                print(content)
                self.f.write(content)

string(.) 可以直接获取文本,不用在指定标签后面跟“/text()”或者“//text()”,得到的文本不用在通过遍历后拼接成完整的数据,它是直接获得拼接以后的文本列表,只需要将它在列表其中取出即可。之后的处理数据和以上采用的方法相同。

未完待续!!!!!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值