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

学习爬虫主要是为了从网站上获取我们想要的数据,但是工作以后,我们爬去的数据是多种多样的,所以这就要求我们掌握多种查找数据的方式。今天以查找文本为例给大家介绍我常用的四种查找数据的方式。

以在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  "]')
        # print(div_list)
        for div in div_list:
            author = div.xpath('.//div[@class="louzhubiaoshi_wrap"]').extract()
            if len(author) != 0:
               content_list = div.xpath('.//div[@class="d_post_content j_d_post_content "]/text()').extract()
                # print(content_list)
               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(.)').extract_first()
                print(content)
                kouge = re.compile('\s')
                content = re.sub(kouge,'',content)+'\n'
                print(content)
                self.f.write(content)

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

未完待续!!!!!

猜你喜欢

转载自blog.csdn.net/zuo199606184810/article/details/81409311