Scrapy爬取小说简单逻辑
Scrapy爬取小说简单逻辑
一 准备工作
1)安装Python
...........
具体安装步骤,可参考http://www.cnblogs.com/zyj-python/p/7392476.html
二 爬虫逻辑
cd Desktop(返回桌面目录) #选择文件保存位置,我放在了桌面Scrapy startProject BooksSpider #BooksSpider为项目名称,自己起名(ps:CMD终端显示"rou can start your first spider with:"表示项目创建成功)
拖动爬虫项目文件用Pycharm打开,点击左下角Terminal打开终端
scrapy genspider books(蜘蛛名,自定义,不能重复,可以修改但不建议修改) www.qisuu.com(网站域名, 这里以奇书网为例)
import sys reload(sys) sys.setdefaultencoding("utf-8") import scrapy import urlparse from ..items import BooksItem
class BooksSpider(scrapy.Spider):name = 'books'allowed_domains = ['www.qisuu.com']start_urls = ['http://www.qisuu.com/']def parse(self, response): pass
# -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding("utf-8") import scrapy import urlparse from ..items import BooksItem class BooksSpider(scrapy.Spider):name = 'books'allowed_domains = ['www.qisuu.com']start_urls = ['http://www.qisuu.com/'] #获取首页导航条的urldef parse(self, response):a_list=response.xpath("//div[@class='nav']/a[@target='_blank']")for a in a_list:#分类名称category_namme=a.xpath("text()").extract_first("")#拼接完整的分类urlcategory_url=urlparse.urljoin(response.url,a.xpath("@href").extract_first("")) #yield将结果返回调度器#将分类地址转发给downloader下载并将结果传给parse_books_list#meta:专门用来传递参数,类型是字典yield scrapy.Request(url=category_url,callback=self.parse_books_list,meta={"category_namme":category_namme,}) #获取分类页面的所有urldef parse_books_list(self,response):href_list=response.xpath("//div[@class='listBox']/ul/li/a/@href").extract()for href in href_list:list_href=urlparse.urljoin(response.url,href)yield scrapy.Request(url=list_href,callback=self.parse_books_detail,meta=response.meta,# meta={"category_namme": response.meta['category_namme'],}) #获取所有页数,并循环获得每一页的urlall_pages=response.xpath("//select[@name='select']/option/@value").extract()for page in all_pages:detail_url=urlparse.urljoin(response.url,page)yield scrapy.Request(url=detail_url,callback=self.parse_books_list,meta=response.meta) #获取每个小说的详情def parse_books_detail(self,response):info_div=response.xpath("//div[@class='detail_right']")title=info_div.xpath("h1/text()").extract_first("")li_list=info_div.xpath("ul/li")size=li_list[2].xpath("text()").extract_first("")size=size.replace(u"文件大小:","").strip()date_time=li_list[4].xpath("text()").extract_first("")date_time=date_time.replace(u"发布日期:","").strip()user=li_list[6].xpath("a/text()").extract_first("")download_times=li_list[1].xpath("text()").extract_first("")download_times = download_times.replace(u"下载次数:", "").strip()book_degree=li_list[7].xpath("em/@class").extract_first("")book_degree = book_degree.replace("lstar","").strip()download_url=response.xpath("//a[@class='downButton']/@href")[1].extract()img_url=response.xpath("//div[@class='detail_pic']/img/@src").extract_first("")img_url=urlparse.urljoin(response.url,img_url)category_namme=response.meta['category_namme']print title,user,date_time,category_nammeitem=BooksItem()item['title']=titleitem['size']=sizeitem['date_time']=date_timeitem['user']=useritem['download_times']=download_timesitem['book_degree']=book_degreeitem['download_url'] = [u"%s"%download_url] #当下在路径有乱码,加u 小说要以GBK格式存储,有中文时要进行编码 item['img_url']=[img_url]item['category_namme']=category_nammeyield item #yield 将结果返回给items.py文件
代码中的xpath与正则表达式是一样的,只是用法更加简单方便, 具体操作可百度, 此处不细说.
在items.py文件中
# -*- coding: utf-8 -*-# Define here the models for your scraped items # # See documentation in: # http://doc.scrapy.org/en/latest/topics/items.htmlimport scrapyclass BooksspiderItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()# passclass BooksItem(scrapy.Item):title = scrapy.Field()size = scrapy.Field()date_time = scrapy.Field()user = scrapy.Field()download_times = scrapy.Field()book_degree = scrapy.Field()download_url = scrapy.Field()img_url = scrapy.Field()category_namme = scrapy.Field() #自定义一个类,用来接收获取到的数据#Field()可以接受任何类型的参数
这时就可以开始爬虫了, 代码为:
scrapy crawl books -o book.json -s FEED_EXPORT_ENCODING = utf-8
其中 scrapy crawl books 是运行books爬虫程序, -o book.json 为以json格式保存, FEED_EXPORT_ENCODING = utf-8 为编码格式
友情提示: 不要轻易去爬虫,只有确定自己代码没有问题才可以,可以先使用终端测试(cmd),将代码一行一行依次粘贴运行
scrapy shell http://www.qisuu.com
如果想要下载至本地:
需要修改settings.py文件
ITEM_PIPELINES = {# 'BooksSpider.pipelines.BooksspiderPipeline': 300,"scrapy.pipelines.images.ImagesPipeline":1,"scrapy.pipelines.files.FilesPipeline":2, } IMAGES_URLS_FIELD = "img_url" IMAGES_STORE = "imgs" FILES_URLS_FIELD = "download_url" FILES_STORE = "files"
找到ITEM_PIPELINES,大约在67行,做出如上修改,IMAGES_URLS_FIELD获取下载图片的url, IMAGES_STORE新建一个文件夹,用来存放图片 FILES用法鱼IMAGES一致
可能存在的问题,原因及解决方案:
转载于:https://www.cnblogs.com/zyj-python/p/7395726.html
Scrapy爬取小说简单逻辑相关推荐
- scrapy爬取小说
文章目录 创建项目 代码实现 效果 创建项目 scrapy startproject book # book 为项目名 文件结构 代码实现 mySpider.py import scrapy from ...
- python爬取小说代码_Python scrapy爬取小说代码案例详解
scrapy是目前python使用的最广泛的爬虫框架 架构图如下 解释: Scrapy Engine(引擎): 负责Spider.ItemPipeline.Downloader.Scheduler中间 ...
- Scrapy爬取顶点小说网
Scrapy爬取小说 爬取目标:顶点小说网 1.Scrapy的安装 pip install scrapy 2.Scrapy的介绍 创建项目 scrapy startproject xxx xxx项目名 ...
- scrapy爬取多页面
前言 使用scrapy的目的是方便爬虫人员通过scrapy框架编写简单的代码,提取需要爬取的网站上有用的数据,其框架底层已经对爬虫的过程做了大量的逻辑处理,而爬虫人员只需按照指定的规则使用即可,个人觉 ...
- 简单的scrapy爬取下载小说
一.scrapy简介 scrapy结构 items.py:用来存放爬虫爬取下来数据的模型 middlewares.py:用来存放各种中间件的文件 pipelines.py:用来将items的模型存储到 ...
- Scrapy爬虫框架,爬取小说网的所有小说
Scrapy入门教程请看 目录 1.思路清理 2.创建爬虫项目 3. 爬虫架构构思 4.爬虫程序具体分析 5.效果展示 6.待优化的地方 1.思路清理 我们的目的是把某个小说网的所有小说给拿下,这就涉 ...
- 练手实例:Scrapy爬取一本完整小说(章节乱序问题解决)
戳这里查看此小说 整体都很简单,没啥多说的,10分钟搞定 外循环在主页面找url进行拼接,小循环解析详细页内容提取小说文本. biquge.py import scrapy from scrapy.s ...
- scrapy爬取起点小说网
闲来无事,在学习过程中练习用scrapy爬取起点小说名 工具:python3.6 操作系统:linux 浏览器:谷歌浏览器 创建项目 在黑屏终端创建一个项目:scrapy startproject Q ...
- Scrapy+crontab 定时爬取小说更新推送到手机邮件
Scrapy+crontab 定时爬取小说更新推送到手机邮件 本人酷爱追火星引力的<逆天邪神>小说,但经常是俩三天才一更,每天打开浏览器查看是否更新贼痛苦.现在利用所学的知识来解决问题.文 ...
- scrapy爬取百万小说
#爬取小说实列 第一步:创建一个scrapy工程[命令行中输入 scrapy startproject demo] 第二步:进入这个工程中,创建一个爬虫[scrapy nss zhuangji.org ...
最新文章
- 深度学习中的贝叶斯统计简介
- tensorflow-gpu版本出现libcublas.so.8.0:cannot open shared object file
- 提前体验「iPhone30」:7比32超长显示器,刷微博神器来了
- Express框架(http服务器 + 路由)
- java游戏+弹幕_JAVA 弹幕小游戏 1.0版本
- 用代码创建工程并添加内容
- 电脑屏保在哪里设置_手机屏保调成绿色能护眼?真的吗?
- oracle rac 通信端口,浅析Oracle 10g rac更改listener端口
- 域名防系统+独立接口池+独立会员+独立权限
- 使用左 右 全 内连接及使用where条件语句的区别
- wangeditor php上传本地图片,wangEditor 本地上传图片配置
- libquickmail 0.1.6 发布,邮件发送包
- python能做什么-学会Python后都能做什么?网友们的回答简直不要太厉害
- 通用电气联手软银 签署Predix软件许可协议
- 更新CocoaPods碰到的问题及知识点
- 【深度讲解】手把手教你python制作萝莉音智能对话语音机器人,附全部源码!速速学起来!!
- ALSA音频架构 -- aplay播放流程分析
- 基于51单片机八音盒电子琴音乐播放器设计(毕设课设)
- Vue+Element UI弹窗实现表格编辑
- 深富策略鸿蒙概念股继续领跌
热门文章
- mac 下设置 sublime text2 的命令行快捷方式 subl
- Oracle 10g dbms_rowid 包源码
- STM32零碎问题记录
- JVM性能监控工具(一)-jdk命令行工具
- 【读书笔记】iOS-简单的数据驱动程序
- oracle 某一字段取反
- PHP (20140510)深入浅出 JavaScript 变量、作用域和内存 v 0.5
- C# SendMessage 全集
- oracle笔记(2010-1-30)
- C++实现包含空格、标点、字符、数字的字符串的逆序输出,并且还可以实现一句语言中每个单词的倒序输出