用Scrapy爬取百度小说吧内容

本次的分享内容是利用scrapy去爬取百度贴吧小说吧的楼主发的帖子的内容,地址连接如下,小说吧链接:《谁杀死了知更鸟》

第一步,首先我们要创建一个Scrapy的项目。

首先在pycharm中新建一个文件夹。名字取为贴吧小说,在我电脑上的路径为:C:\Users\Administrator\Desktop\Python资料\贴吧小说

打开控制台界面输入cmd。输入cd+空格+C:\Users\Administrator\Desktop\Python资料\贴吧小说。

然后去创建项目。

创建结果如下:

第二步,创建爬虫的文件

打开“xiaoshuo.py”,书写代码,代码如下。

# -*- coding: utf-8 -*-
import scrapy
import re

class XiaoshuoSpider(scrapy.Spider):
    #该name值为爬虫名,这个值是唯一的
    name = 'xiaoshuo'
    #爬虫的爬取域
    allowed_domains = ['tieba.baidu.com']
    #起始的url列表,第一批请求的地址
    start_urls = ['https://tieba.baidu.com/p/5815118868?pn=1']
    #创建一个名字为tieba的txt文档。
    f = open('tieba.txt','a' ,encoding='utf-8')
    def parse(self, response):
        # 找到指定类名的div标签,标签内贴吧内容和作者的集合体
        div_list = response.xpath('//div[@class="l_post l_post_bright j_l_post clearfix  "]')
        # print(div_list)
        # 找到作者
        for div in div_list:
            # 获取含有louzhubiaoshi_wrap类名的标签,该类名只有作者含有
            author = div.xpath('.//div[@class="louzhubiaoshi_wrap"]').extract()
            #判断列表的长度
            if len(author) != 0:
            #获取楼主发帖子的内容
                content = div.xpath('.//div[@class="d_post_content j_d_post_content "]').xpath('string(.)').extract()[0] + ',\n'                           
                remove = re.compile('\s')
                douhao = re.compile(',')
                content = ''
                self.f.write(content)
                self.f.write('\n')

在终端内输入命令:scrapy crawl xiaoshuo,会出现以下结果。

点击进入这个文档,结果为:

这样便算是成功的爬取内容了。

这个需要给大家说一些比较重要的内容,获取标签内的全部文本的几种方式。获取楼主发帖内容的这部分。

1.获取的样式为:通过获取最外面的标签,然后遍历,获取到里面的文本内容

content_list= div.xpath('.//div[@class="d_post_contentj_d_post_content"]/text()').extract()
                 print(content_list)
                 for content in  content_list:
                     print(content)

运行结果为:

2.用正则去掉所有的多余标签。

content_list= div.xpath('.//div[@class="d_post_content j_d_post_content "]').extract()
                 print(content_list)
                 for content in content_list:
                     content = content.strip()
                     pattern = re.compile(r'<.*?>', re.S)
                     content = pattern.sub('', content)
                     print(content)

3.用//text()获取标签内文本内容。/text()获取的是标签的文本,//text()获取的是标签以及字标签的文本。

content_list=div.xpath('.//div[@class="d_post_contentj_d_post_content"]//text()').extract()
                print(content_list)
                for content in content_list:
                         print(content)

运行结果为:

4.使用xpath('string(.)')这种方式来获取所有的文本并且连接。

content_list = div.xpath('.//div[@class="d_post_content j_d_post_content "]')
                content_list=content_list.xpath('string(.)').extract()
                print(content_list)
                for content in content_list:
                    print(content)

运行结果为:

以上为获取标签内内容的四种方式。

爬取网站数据的简单例子就这样的完成了。

猜你喜欢

转载自blog.csdn.net/qq_42543244/article/details/81408153