爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据
为了入门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框架爬取全书网小说数据相关推荐
- scrapy实现爬取全书网小说到Mysql数据库(附代码)
前言 本篇文章实现python的scrapy框架爬取全书网小说,scrapy框架的安装我在这里就不在赘述了,建议window用户使用anaconda安装,这里比较省心一些.运行环境python3(实际 ...
- Python爬虫 | 爬取全书网小说斗罗大陆
网络爬虫:可以理解成网页蜘蛛,在网页上采集数据 爬取流程: 1.导入模块 2.打开网页,获取原码 3.获取章节原码 4.获取正文 5.过滤'杂质' 6.保存下载 废话不多说开始爬!!! 今天爬的网站是 ...
- 用python爬取基金网信息数据,保存到表格,并做成四种简单可视化。(爬虫之路,永无止境!)
用python爬取基金网信息数据,保存到表格,并做成四种简单可视化.(爬虫之路,永无止境!) 上次 2021-07-07写的用python爬取腾讯招聘网岗位信息保存到表格,并做成简单可视化. 有的人留 ...
- python爬虫天天基金_不使用Python爬虫框架,多线程+代理池爬取天天基金网、股票数据...
提到爬虫,大部分人都会想到使用Scrapy工具,但是仅仅停留在会使用的阶段.为了增加对爬虫机制的理解,我们可以手动实现多线程的爬虫过程,同时,引入IP代理池进行基本的反爬操作. 本次使用天天基金网进行 ...
- 爬虫实战 | 爬取东方财富网股票数据
本文转载来自:公众号 志斌的python笔记 今天有个朋友说,他想做个关于股票的可视化网页,但是缺乏股票的数据,想让志斌帮他做个爬虫来每天获取数据.所以我将它写成一个实战案例,供大家一起参考学习! 1 ...
- 【Python爬虫系列教程 22-100】小姐姐教大家爬取喜马拉雅全站音频数据,探秘喜马拉雅的天籁之音
文章目录 一.前言 二.寻找音频的URL 三.请求参数的处理 四.重新分析目标网站 五.实现代码 六.爬取结果 一.前言 喜马拉雅FM是一个知名的音频分享平台,在移动音频行业的市场占有率已达73%,用 ...
- python爬虫天气数据_Python爬取真气网天气数据
使用工具:pycharm,Chrome driver 使用库:selenium 前言: 我们无时无刻不在呼吸着周围的空气, 可身边的空气质量怎样呢? 嗯~~~ 大多数人会沉思一会儿, 最后还是会说:不 ...
- 跟潭州学院的强子老师学习网络爬虫---爬取全书网
真是太白了,python之路还有很长,今天我从这里开始,留作自己备忘.2018-04-05 花了一个下午学习个爬小说的,总的来说是因为自己没什么基础,哪里不会补哪里,磕磕绊绊的,总算是能运行,先把代码 ...
- 爬虫学习笔记(用python爬取东方财富网实验)
参考文章以及视频:(11条消息) 爬虫实战 | 爬取东方财富网股票数据_简说Python的博客-CSDN博客.手把手教你从东方财富网上获取股票数据_哔哩哔哩_bilibili.[Python爬虫案例] ...
最新文章
- vue.js 发布后路径引用问题
- mysql删除root用户密码_MySQL忘记密码 或者误删除root用户有效解决办法
- eclipse手动pom本地包_环境篇--Eclipse如何远程连接Hadoop集群调试
- SU Demos-02Filtering-05Suk1k2filter
- 按钮 交互_SwiftUI中的微交互—菜单按钮动画
- maven中常用jar包插件
- c java 引用类型_java中的引用类型
- [转载] 远程方法调用(RMI)与远程过程调用(RPC)
- 计算机网络与应用第三次笔记
- v-for循环下动态绑定ref后undefine的解决方式
- linux 文件夹 775,Linux chmod目录权限命令图文详解
- IQ FMEA-失效模式及影响分析
- python 计算两个经纬度的距离_使用经纬度和海拔(高程)计算两点之间的距离...
- 浏览器插件检测淘宝订单是否淘客下单
- 大数据认知实习的实习目的_如何在数据实习中取得成功
- c#将byte转为int_C# int转byte[],byte[]转int
- 十进制转换为十二进制 Java
- 访问页面出错:The requested URL / was not found on this server. 网站打开出现404
- centos 加密解密
- 苹果app退款_app退款理由写什么好?苹果退款理由怎么写才好?