为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序

下面我们尝试爬取全书网中网游动漫类小说的书籍信息。


一、准备阶段

明确一下爬虫页面分析的思路:

对于书籍列表页:我们需要知道打开单本书籍的地址、以及获取点开下一页书籍列表页的链接

对于书籍信息页面,我们需要找到提取:(书名、作者、书本简介、书本连载状态)这四点信息

爬虫流程:书籍列表页中点开一本书→提取每一本书的书籍信息;当一页书籍列表页的书籍全部被采集以后,按照获取的下一页链接打开新的商户及列表页→点开一本书的信息→提取每一本书的信息……


二、页面分析

首先,我们先对爬取数据要打开的第一页页面进行分析。

除了使用开发者工具以外,我们还可以使用scrapy shell <url>命令,可以进行前期的爬取实验,从而提高开发的效率。

首先打开cmd(前提必须是安装好了scrapy~,这里就不说怎么按照scrapy了)

输入scrapy shell +<要分析的网址>

可以得到一个这样的结果

运行完这条命令以后,scrapy shell 会用url参数构造一个request对象,并且提交给scrapy引擎,页面下载完以后程序进入一个pyhon shell中,我们可以调用view函数使用浏览器显示response所包含的页面

*进行页面分析的时候view函数解析的页更加可靠。

弹出页面如下:

通过观察源代码,可以发现所有书籍link信息前缀为"http://www.quanshuwang.com/book_"

此时我们可以尝试在scrapy shell中提取这些信息

这里使用LinkExtractor提取这些链接

在scrapy shell 输入信息与展示信息如下:

随后我们寻找下一页标签的链接,查看源代码可以发现在一个class 为next的a标签中

在scrapy shell中尝试提取,发现可以成功提取到目的link

接下来分析单页书籍信息

处理思路和分析书籍页面信息一样,获取网页

在shell中通过fetch函数下载书籍信息页面,然后再通过view函数在浏览器中查看该页面

通过查看网页源代码,发现所有数据包含在class为detail的div模块中。

接下来使用response.css或者response.xpath对数据进行提取

在scrapy shell中尝试如下:(这里只举一个例子,其他的可以自己类似尝试)

逐一确定其他目的提取元素的方式以后,可以开始进行正式的编码实现


三、编码实现

首先,我们在cmd中进到目的python目录中,创建一个scrapy项目

代码如下:

而后进入到创建的新scrapy项目目录下,新建spider文件

运行以后,scrapy genspider命令创建了文件fiction/spiders/fictions.py,并且创建了相应的spider类

总体文件项如图:(其中,fictions.csv是后面进行爬虫的时候生成的)

接下来我们可以对“框架”按照我们前面的需求进行改写

①首先改写Item项目

在fiction/items.py中修改代码如下

 1 # -*- coding: utf-8 -*-
 2
 3 # Define here the models for your scraped items
 4 #
 5 # See documentation in:
 6 # https://doc.scrapy.org/en/latest/topics/items.html
 7
 8 import scrapy
 9
10
11 class FictionItem(scrapy.Item):
12     # define the fields for your item here like:
13     # name = scrapy.Field()
14
15     bookname = scrapy.Field()
16     statement = scrapy.Field()
17     author = scrapy.Field()
18     simple_content = scrapy.Field()
19
20
21     pass

②实现页面解析函数

修改fiction/spiders/fictions.py代码如下(具体分析前面已经讨论,注释见详细代码)

 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3 from scrapy.linkextractors import LinkExtractor
 4 from ..items import FictionItem
 5
 6
 7 class FictionsSpider(scrapy.Spider):
 8     name = 'fictions'
 9     allowed_domains = ['quanshuwang.com']
10     start_urls = ['http://www.quanshuwang.com/list/8_1.html']
11
12     # 书籍列表的页面解析函数
13     def parse(self,response):
14         # 提取书籍列表页面每一本书的链接
15         pattern = 'http://www.quanshuwang.com/book_'
16         le = LinkExtractor(restrict_xpaths='//*[@class="seeWell cf"]',allow=pattern)
17         for link in le.extract_links(response):
18             yield scrapy.Request(link.url,callback=self.parse_book)
19
20         # 提取下一页链接
21         le = LinkExtractor(restrict_xpaths='//*[@id="pagelink"]/a[@class="next"]')
22         links =  le.extract_links(response)
23         if links:
24             next_url = links[0].url
25             yield scrapy.Request(next_url,callback=self.parse)
26
27         pass
28
29
30     # 书籍界面的解析函数
31     def parse_book(self, response):
32         book=FictionItem()
33         sel = response.css('div.detail')
34         book['bookname']=sel.xpath('./div[1]/h1/text()').extract_first()
35         book['statement']=sel.xpath('//*[@id="container"]/div[2]/section/div/div[4]/div[1]/dl[1]/dd/text()').extract_first()
36         book['author']=sel.xpath('//*[@id="container"]/div[2]/section/div/div[4]/div[1]/dl[2]/dd/text()').extract_first()
37         book['simple_content']=sel.xpath('string(//*[@id="waa"])').extract()
38
39         yield book

③设置参数防止存储数据乱码

在setting.py中加上这个代码

1 FEED_EXPORT_ENCODING = 'utf-8'

④命令行中调用(要进入到/fiction/fiction中(与setting.py同级目录)才能调用)

在cmd输入代码如下

scrapy crawl books -o fiction.csv

就可以调用我们写的爬虫程序进行数据爬取啦!!!

最后贴个爬下来的数据的图

转载于:https://www.cnblogs.com/AKsnoopy/p/10742763.html

爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据相关推荐

  1. scrapy实现爬取全书网小说到Mysql数据库(附代码)

    前言 本篇文章实现python的scrapy框架爬取全书网小说,scrapy框架的安装我在这里就不在赘述了,建议window用户使用anaconda安装,这里比较省心一些.运行环境python3(实际 ...

  2. Python爬虫 | 爬取全书网小说斗罗大陆

    网络爬虫:可以理解成网页蜘蛛,在网页上采集数据 爬取流程: 1.导入模块 2.打开网页,获取原码 3.获取章节原码 4.获取正文 5.过滤'杂质' 6.保存下载 废话不多说开始爬!!! 今天爬的网站是 ...

  3. 用python爬取基金网信息数据,保存到表格,并做成四种简单可视化。(爬虫之路,永无止境!)

    用python爬取基金网信息数据,保存到表格,并做成四种简单可视化.(爬虫之路,永无止境!) 上次 2021-07-07写的用python爬取腾讯招聘网岗位信息保存到表格,并做成简单可视化. 有的人留 ...

  4. python爬虫天天基金_不使用Python爬虫框架,多线程+代理池爬取天天基金网、股票数据...

    提到爬虫,大部分人都会想到使用Scrapy工具,但是仅仅停留在会使用的阶段.为了增加对爬虫机制的理解,我们可以手动实现多线程的爬虫过程,同时,引入IP代理池进行基本的反爬操作. 本次使用天天基金网进行 ...

  5. 爬虫实战 | 爬取东方财富网股票数据

    本文转载来自:公众号 志斌的python笔记 今天有个朋友说,他想做个关于股票的可视化网页,但是缺乏股票的数据,想让志斌帮他做个爬虫来每天获取数据.所以我将它写成一个实战案例,供大家一起参考学习! 1 ...

  6. 【Python爬虫系列教程 22-100】小姐姐教大家爬取喜马拉雅全站音频数据,探秘喜马拉雅的天籁之音

    文章目录 一.前言 二.寻找音频的URL 三.请求参数的处理 四.重新分析目标网站 五.实现代码 六.爬取结果 一.前言 喜马拉雅FM是一个知名的音频分享平台,在移动音频行业的市场占有率已达73%,用 ...

  7. python爬虫天气数据_Python爬取真气网天气数据

    使用工具:pycharm,Chrome driver 使用库:selenium 前言: 我们无时无刻不在呼吸着周围的空气, 可身边的空气质量怎样呢? 嗯~~~ 大多数人会沉思一会儿, 最后还是会说:不 ...

  8. 跟潭州学院的强子老师学习网络爬虫---爬取全书网

    真是太白了,python之路还有很长,今天我从这里开始,留作自己备忘.2018-04-05 花了一个下午学习个爬小说的,总的来说是因为自己没什么基础,哪里不会补哪里,磕磕绊绊的,总算是能运行,先把代码 ...

  9. 爬虫学习笔记(用python爬取东方财富网实验)

    参考文章以及视频:(11条消息) 爬虫实战 | 爬取东方财富网股票数据_简说Python的博客-CSDN博客.手把手教你从东方财富网上获取股票数据_哔哩哔哩_bilibili.[Python爬虫案例] ...

最新文章

  1. vue.js 发布后路径引用问题
  2. mysql删除root用户密码_MySQL忘记密码 或者误删除root用户有效解决办法
  3. eclipse手动pom本地包_环境篇--Eclipse如何远程连接Hadoop集群调试
  4. SU Demos-02Filtering-05Suk1k2filter
  5. 按钮 交互_SwiftUI中的微交互—菜单按钮动画
  6. maven中常用jar包插件
  7. c java 引用类型_java中的引用类型
  8. [转载] 远程方法调用(RMI)与远程过程调用(RPC)
  9. 计算机网络与应用第三次笔记
  10. v-for循环下动态绑定ref后undefine的解决方式
  11. linux 文件夹 775,Linux chmod目录权限命令图文详解
  12. IQ FMEA-失效模式及影响分析
  13. python 计算两个经纬度的距离_使用经纬度和海拔(高程)计算两点之间的距离...
  14. 浏览器插件检测淘宝订单是否淘客下单
  15. 大数据认知实习的实习目的_如何在数据实习中取得成功
  16. c#将byte转为int_C# int转byte[],byte[]转int
  17. 十进制转换为十二进制 Java
  18. 访问页面出错:The requested URL / was not found on this server. 网站打开出现404
  19. centos 加密解密
  20. 苹果app退款_app退款理由写什么好?苹果退款理由怎么写才好?

热门文章

  1. el-popover 点击关闭事件的调用
  2. 5g上行速率怎么提升_5G室内覆盖性能及关键问题分析
  3. 2020-05-04
  4. 20230727-随笔
  5. cocos2dx之FadeIn,FadeOut,FadeTo
  6. 报错:DropDownList1”有一个无效 SelectedValue,因为它不在项目列表中
  7. 华为三层交换机二三层端口切换
  8. 付款失败,订单不存在或者状态异常。(ALI38110)
  9. 红帽子(Red hat)公司如何在开源linux软件下盈利?
  10. uusee花4000万买个奥运转播权