为了入门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中修改代码如下

 # -*- coding: utf-8 -*-

 # Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html import scrapy class FictionItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field() bookname = scrapy.Field()
statement = scrapy.Field()
author = scrapy.Field()
simple_content = scrapy.Field() pass

②实现页面解析函数

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

 # -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from ..items import FictionItem class FictionsSpider(scrapy.Spider):
name = 'fictions'
allowed_domains = ['quanshuwang.com']
start_urls = ['http://www.quanshuwang.com/list/8_1.html'] # 书籍列表的页面解析函数
def parse(self,response):
# 提取书籍列表页面每一本书的链接
pattern = 'http://www.quanshuwang.com/book_'
le = LinkExtractor(restrict_xpaths='//*[@class="seeWell cf"]',allow=pattern)
for link in le.extract_links(response):
yield scrapy.Request(link.url,callback=self.parse_book) # 提取下一页链接
le = LinkExtractor(restrict_xpaths='//*[@id="pagelink"]/a[@class="next"]')
links = le.extract_links(response)
if links:
next_url = links[0].url
yield scrapy.Request(next_url,callback=self.parse) pass # 书籍界面的解析函数
def parse_book(self, response):
book=FictionItem()
sel = response.css('div.detail')
book['bookname']=sel.xpath('./div[1]/h1/text()').extract_first()
book['statement']=sel.xpath('//*[@id="container"]/div[2]/section/div/div[4]/div[1]/dl[1]/dd/text()').extract_first()
book['author']=sel.xpath('//*[@id="container"]/div[2]/section/div/div[4]/div[1]/dl[2]/dd/text()').extract_first()
book['simple_content']=sel.xpath('string(//*[@id="waa"])').extract() yield book

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

在setting.py中加上这个代码

FEED_EXPORT_ENCODING = 'utf-8'

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

在cmd输入代码如下

scrapy crawl books -o fiction.csv

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

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

爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据的更多相关文章

  1. Python爬虫爬取全书网小说,程序源码+程序详细分析

    Python爬虫爬取全书网小说教程 第一步:打开谷歌浏览器,搜索全书网,然后再点击你想下载的小说,进入图一页面后点击F12选择Network,如果没有内容按F5刷新一下 点击Network之后出现如下 ...

  2. 使用scrapy框架爬取全书网书籍信息。

    爬取的内容:书籍名称,作者名称,书籍简介,全书网5041页,写入mysql数据库和.txt文件 1,创建scrapy项目 scrapy startproject numberone 2,创建爬虫主程序 ...

  3. scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250

    scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...

  4. Scrapy爬虫(5)爬取当当网图书畅销榜

      本次将会使用Scrapy来爬取当当网的图书畅销榜,其网页截图如下:   我们的爬虫将会把每本书的排名,书名,作者,出版社,价格以及评论数爬取出来,并保存为csv格式的文件.项目的具体创建就不再多讲 ...

  5. Python爬虫入门——使用requests爬取python岗位招聘数据

    爬虫目的 使用requests库和BeautifulSoup4库来爬取拉勾网Python相关岗位数据 爬虫工具 使用Requests库发送http请求,然后用BeautifulSoup库解析HTML文 ...

  6. Scrapy实战篇(八)之Scrapy对接selenium爬取京东商城商品数据

    本篇目标:我们以爬取京东商城商品数据为例,展示Scrapy框架对接selenium爬取京东商城商品数据. 背景: 京东商城页面为js动态加载页面,直接使用request请求,无法得到我们想要的商品数据 ...

  7. 如何用python爬虫从爬取一章小说到爬取全站小说

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

  8. Python爬虫之爬取慕课网课程评分

    BS是什么? BeautifulSoup是一个基于标签的文本解析工具.可以根据标签提取想要的内容,很适合处理html和xml这类语言文本.如果你希望了解更多关于BS的介绍和用法,请看Beautiful ...

  9. Python爬虫项目--爬取自如网房源信息

    本次爬取自如网房源信息所用到的知识点: 1. requests get请求 2. lxml解析html 3. Xpath 4. MongoDB存储 正文 1.分析目标站点 1. url: http:/ ...

随机推荐

  1. 实现logstash6.4.3 同步mysql数据到Elasticsearch6.4.3

    本文旨在实践把mysql已有的数据同步到elasticsearch中,使用的版本是6.4.3,对于其它6.x版本理应是一样的处理方式. 本文目录: 1.初始化Elasticsearch 6.4.3 1 ...

  2. TimesTen数据库表中显示中文乱码的真正原因

    上一篇博客TimesTen中文乱码问题(其实是cmd.exe中文乱码)的内容可能不对,也许只是个巧合?不得而知了.因为我今天重装系统了,把win10换成了win7(64bit).又安装了timeste ...

  3. Tensor索引操作

    #Tensor索引操作 ''''' Tensor支持与numpy.ndarray类似的索引操作,语法上也类似 如无特殊说明,索引出来的结果与原tensor共享内存,即修改一个,另一个会跟着修改 ''' ...

  4. ECS云服务器配置数据库远程链接

    环境: windows server 2012 R2 Datacenter(数据中心版本) sql server 2008 R2 Express (环境的安装步骤此处不做教程) 开启远端链接重要步骤如 ...

  5. Vue(三十)公共组件

    以 分页 组件为例:(根据自己具体业务编写) 1.pagination.vue <template> <!-- 分页 --> <div class="table ...

  6. django restframework

    一.django restframework 请求流程源码剖析 上面的认证一个流程是rest_framework的关于APIauth的认证流程,,这个流程试用权限.频率.版本.认证.这个四个组件都是通 ...

  7. 搭建 RTMP 服务器

    主要步骤 具体步骤 FAQ docker 搭建版 参考 主要步骤 下载 nginx 的 rtmp 模块 编译nginx,带 hls,rtmp 配置 nginx.conf,设置 rtmp 的推流文件路径 ...

  8. Hadoop集群搭建-HA高可用(手动切换模式)(四)

    步骤和集群规划 1)保存完全分布式模式配置 2)在full配置的基础上修改为高可用HA 3)第一次启动HA 4)常规启动HA 5)运行wordcount 集群规划: centos虚拟机:node-00 ...

  9. ArcMap AddIn之下载ArcGIS Server地图服务中的数据

    涉及到开发知识点1.ArcGIS Server地图服务 2.C# web请求获取数据 3.AddIN开发技术 工具界面: 具体涉及到的代码之后有空贴出来.先上工具 AddIn插件下载地址:点击这里下载 ...

  10. ubuntu tensorflow install(Ubuntu16.04+CUDA9.0+cuDNN7.5+Python3.6+TensorFlow1.5)

    在网上找了很多案例,踩了许多坑,感觉比较全面的是下面介绍的 http://www.cnblogs.com/xuliangxing/p/7575586.html 先说说我的步骤: 首先安装了Anacod ...