请选择 进入手机版 | 继续访问电脑版

[python] Python爬虫教程使用 Scrapy框架爬取小说代码示例

[复制链接]
查看106 | 回复7 | 2021-9-13 13:49:56 | 显示全部楼层 |阅读模式
目次

Scrapy框架简单先容

Scrapy框架是一个基于Twisted的异步处理框架,是纯Python实现的爬虫框架,是提取布局 性数据而编写的应用框架,其架构清晰 ,模块之间的耦合程度低,可扩展性极强,我们只必要 少量的代码就可以或许 快速抓取数据。

其框架如下图所示:

Python爬虫教程使用

Scrapy框架爬取小说代码示例

Scrapy Engine是整个框架的核心,而涉及到我们编写代码的模块一样寻常 只有Item Pipeline模块和Spiders模块。

创建Scrapy项目

起首 我们通过以下代码来创建Scrapy项目,实行 代码如下图所示:

  1. Scrapy startproject Fiction
复制代码

运行结果 如下图所示:

Python爬虫教程使用

Scrapy框架爬取小说代码示例

通过上图可知,我们在C盘创建了一个新的Scrapy项目,项目名为Fiction,而且还提示我们可以通过以下下令 创建第一个Spider爬虫,下令 如下所示:

  1. cd Fiction #进入目录
  2. scrapy genspider example example.com #创建spider爬虫
复制代码

此中 example是我们爬虫名,example.com是爬虫爬取的范围,也就是网站的域名。

Fiction文件夹内容如下图所示:

Python爬虫教程使用

Scrapy框架爬取小说代码示例

创建Spider爬虫

在上面的步骤我们成功创建了一个Scrapy项目,而且知道怎样 创建Spider爬虫,接下来我们创建名为fiction的Spider爬虫,其域名为www.17k.com,代码如下所示:

  1. scrapy genspider fiction www.17k.com
复制代码

运行后,spiders文件夹中多了我们刚才创建fiction.py,这个就是我们创建的Spider爬虫。

如下图所示:

Python爬虫教程使用

Scrapy框架爬取小说代码示例

看到这么多py文件是不是慌了,实在 不用慌,一样寻常 环境 我们紧张 在刚创建的spider爬虫文件、items.py和pipelines.py举行 编写代码,此中 :

    1. fiction.py
    复制代码
    :紧张 编写代码定义爬取的逻辑,分析 相应 并天生 提取结果 和新的哀求 ;
    1. items.py
    复制代码
    :紧张 先定义好爬取数据的字段,避免拼写错误或者定义字段错误,当然我们可以不先定义好字段,而在fiction.py中直接定义;
    1. pipelines.py
    复制代码
    :紧张 是编写数据洗濯 、验证和存储数据的代码,当我们把数据存储在csv、xml、pickle、marshal、json等文件时,就不必要 在pipelines.py中编写代码了,只必要 实行 以下代码即可:
  1. scrapy crawl fiction 文件名.后缀
复制代码

当数据必要 保存在MongoDB数据库时,则编写以下代码即可:

  1. from pymongo import MongoClient
  2. client=MongoClient()
  3. collection=client["Fiction"]["fiction"]
  4. ​class Test1Pipeline:
  5. def process_item(self, item, spider):
  6. collection.insert(item)
  7. return item
复制代码

Spider爬虫提取数据

在提取数据前,起首 我们进入要爬取小说网站并打开开辟 者工具,如下图所示:

Python爬虫教程使用

Scrapy框架爬取小说代码示例

Python爬虫教程使用

Scrapy框架爬取小说代码示例

我们通过上图可以发现,

存放着我们全部 小说章节名,点击该章节就可以跳转到对应的章节页面,以是 可以利用 Xpath来通过这个div作为我们的xpath爬取范围,通过for循环来遍历获取每个章节的名和URL链接。

跳转章节内容页面后,打开开辟 者工具,如下图所示:

Python爬虫教程使用

Scrapy框架爬取小说代码示例

通过上图可以发现,小说内容存储在

内里 ,我们可以通过for循环来遍历该dl中的
获取到章节的全部内容,当然也是通过利用 Xpath来获取。

items.py代码定义字段

细致 的小伙伴就发现了,我们所必要 提前的字段有章节名、章节URL链接和章节内容,此中 章节名和章节内容是必要 举行 数据保存的,以是 可以先在items.py文件中定义好字段名,具体 代码如下所示:

  1. import scrapy
  2. ​class FictionItem(scrapy.Item):
  3. # define the fields for your item here like:
  4. name = scrapy.Field()
  5. text = scrapy.Field()
复制代码

定义字段很简单,字段名=scrapy.Field()即可。

对了,在items.py定义好字段有个最好的好处是当我们在获取到数据的时间 ,利用 不同的item来存放不同的数据,在把数据交给pipeline的时间 ,可以通过isinstance(item,FictionItem)来判断 数据属于哪个item,举行 不同的数据(item)处理。

定义好字段后,这是我们通过在pipeline.py文件中编写代码,对不同的item数据举行 区分,具体 代码如下:

  1. from Fiction.items import FictionItem
  2. class FictionPipeline:
  3. def process_item(self, item, spider):
  4. if isinstance(item,FictionItem):
  5. print(item)
复制代码

当然,在我们爬取的项目中,只必要 一个class类,在上面的代码只是为了展示怎样 判断 区分数据属于哪个item。

fiction.py代码提取数据

fiction.py文件也就是我们创建的spider爬虫,打开fiction.py文件,其代码内容如下所示:

  1. import scrapy
  2. class FictionSpider(scrapy.Spider):
  3. name = 'fiction'
  4. allowed_domains = ['www.17k.com']
  5. start_urls = ['http://www.17k.com/']
  6. ​ def parse(self, response):
  7. pass
复制代码

此中 :

    1. name
    复制代码
    是定义此爬虫名称的字符串,每个项目唯一的名字,用来区分不同的Spider,启动爬虫时利用 scrapy crawl +该爬虫名字;
    1. allowed_domains
    复制代码
    是答应 爬取的域名,防止爬虫爬到其他网站;
    1. start_urls
    复制代码
    是最开始爬取的url;
    1. parse()
    复制代码
    方法是负责分析 返回相应 、提取数据或进一步天生 要处理的哀求 ,留意 :不能修改这个方法的名字。

大致相识 该文件内容的各个部分后,我们开始提取首页的章节名和章节URL链接,具体 代码如下所示:

  1. import scrapy
  2. from Fiction.items import FictionItem
  3. ​class FictionSpider(scrapy.Spider):
  4. name = 'fiction'
  5. allowed_domains = ['www.17k.com']
  6. start_urls = ['https://www.17k.com/list/2536069.html']
  7. ​ def parse(self, response):
  8. html = response.xpath('//dl[@class="Volume"]')
  9. books = html.xpath('./dd/a')
  10. for book in books:
  11. item =FictionItem()
  12. item['name'] = []
  13. name = book.xpath('./span/text()').extract()
  14. for i in name:
  15. item['name'].append(i.replace('\n', '').replace('\t', ''))
  16. href = book.xpath('./@href').extract_first()
  17. href = 'https://www.17k.com' + href
  18. yield scrapy.Request(url=href, callback=self.parse_detail, meta={'item': item})
复制代码

起首 导入FictionItem,再我们把start_urls链接修改为待会要爬的URL链接,在parse()方法中,利用 xpath获取章节名和章节URL链接,通过for循环调用FictionItem(),再把章节名存放在item内里 。

通过天生 器yield 返回调用scrapy.Request()方法,此中 :

    1. url=href
    复制代码
    :表示下一个爬取的URL链接;
    1. callback
    复制代码
    :表示指定parse_detail函数作为分析 处理;
    1. meta
    复制代码
    :实如今 不同的分析 函数中传递数据。

在上一步中我们指定了parse_detail函数作为分析 处理,接下来将编写parse_detail函数来获取章节内容,具体 代码如下所示:

  1. def parse_detail(self,response):
  2. string=""
  3. item=response.meta['item']
  4. content=response.xpath('//*[@id="readArea"]/div[1]/div[2]//p/text()').extract()
  5. for i in content:
  6. string=string+i+'\n'
  7. item['text']=string
  8. yield item
复制代码

起首 我们定义了一个空变量string,在通过response.meta[]来汲取 item数据,其参数为上一步中的meta={'item': item}的item,接下来获取章节内容,末了 将章节内容存储在item['text']中,并通过天生 器yield返回数据给引擎。

pipelines.py代码保存数据

章节名和章节内容已经全部获取下来了,接下来我们把获取下来的数据保存为txt文件,具体 代码如下所示:

  1. from Fiction.items import FictionItem
  2. import time
  3. class FictionPipeline:
  4. def open_spider(self, spider):
  5. print(time.time())
  6. def process_item(self, item, spider):
  7. if isinstance(item, FictionItem):
  8. title = item['name']
  9. content = item['text']
  10. with open(f'小说/{title[0]}.txt', 'w', encoding='utf-8')as f:
  11. f.write(content)
  12. def close_spider(self, spider):
  13. print(time.time())
复制代码

起首 我们导入FictionItem、time,在open_spider()和close_spider()方法编写代码调用time.time()来获取爬取的开始时间和竣事 时间,再在process_item()方法中,把引擎返回的item['name']和item['text']分别存放在title和content中,并通过open打开txt文件,调用write()把章节内容写入在txt文件中。

settings.py代码启动爬虫

在启动爬虫前,我们先要在settings.py文件中启动引擎,启动方式很简单,只要找到下图中的代码,并取消代码的表明 即可:

Python爬虫教程使用

Scrapy框架爬取小说代码示例

有人大概 问:那User-Agent在那里 设置?我们可以在settings.py文件中,设置User-Agent,具体 代码如下:

Python爬虫教程使用

Scrapy框架爬取小说代码示例

好了,全部 代码已经编写完毕了,接下来将启动爬虫了,实行 代码如下:

  1. scrapy crawl fiction
复制代码

启动爬虫后,发现我们控制台内里 多了很多log日记 数据的输出,这时可以通过在settings.py添加以下代码,就可以屏蔽这些log日记 :

  1. LOG_LEVEL="WARNING"
复制代码

结果 展示

Python爬虫教程使用

Scrapy框架爬取小说代码示例

好了,scrapy框架爬取小说就讲到这里了,感觉大家的观看!!!

更多关于Python爬虫教程Scrapy框架爬取的资料请关注脚本之家别的 干系 文章!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 乱说家刳 | 2021-9-28 06:07:10 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的源码论坛他的站点都是商业源码,还是免费下载的那种!特别好用。访问地址:http://www.mxswl.com 猫先森网络
回复

使用道具 举报

avatar 风云18171265739 | 2021-9-29 10:20:34 | 显示全部楼层
骂人也是要有水平的!
回复

使用道具 举报

avatar 123457524 | 2021-10-3 06:55:16 | 显示全部楼层
楼上的很有激情啊!
回复

使用道具 举报

avatar 就是爱巴萨衣 | 2021-10-5 04:20:34 | 显示全部楼层
看了这么多帖子,第一次看到这么有深度了!
回复

使用道具 举报

avatar 淡淡清水1314 | 2021-10-18 20:40:20 | 显示全部楼层
admin楼主,你妈妈喊你回家吃饭!
回复

使用道具 举报

admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,运动刷步数还是免费刷的,QQ和微信都可以刷,特别好用。访问地址:http://yd.mxswl.com 猫先森网络
回复

使用道具 举报

admin楼主的帖子越来越有深度了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则