前言

最近由于要调研一些机器学习方面的最新研究技术,故需要看一些相关方面的论文,这里就简单写了一个爬虫脚本,非常简单,使用的是Scrapy 框架

在实践的过程中遇到Unhandled error in Deferred错误,网上大多给出的答案是说由于pypiwin32的问题,可以我的pypiwin32是没有问题的,可就是一直Unhandled error in Deferred错误,很无语呀,最后我发现自己一直是屏蔽Log信息运行的即

scrapy crawl arxiv --nolog

于是乎就定位不到具体错在哪里,所以如果你也遇到相同情况还是看一下log吧

scrapy crawl arxiv

我的情况是最后定位到是piplines.py文件出错啦,具体原因下面看,总之我想说的是,遇到Unhandled error in Deferred问题的时候,也许是piplines.py出错啦,应该定位检查一下的

本文适合刚入门同学

采用的是循序渐进的方式进行演示,直到最终目的,对Scrapy的各个文件作用都进行了演示对比

全部代码:https://github.com/Mryangkaitong/python_Crawler/tree/master/MolMachineLearning

推荐:

入门博客:https://www.runoob.com/w3cnote/scrapy-detail.html

Scrapy英文文档:https://doc.scrapy.org/en/latest/topics/spiders.html

Scrapy中文文档:https://oner-wv.gitbooks.io/scrapy_zh/content/?q=

先给一下整体的脉络把控:

items.py : 是数据结构,类似一个字典

spiders文件夹下的arxiv.py  : 是爬虫文件,具体的名字可以根据自己的需要进行定义

pipelines.py :管道文件,负责对爬取的数据进行处理包括过滤,保存,下载等等

settings.py : 配置文件,其中比较关键的作用是是激活管道文件的运行

正文

要爬取的网站是https://arxiv.org/list/cs.LG/recent

下载的很简单啦,笔者这里使用的是anaconda

conda install Scrapy

安装好后,打开cmd ,输入scrapy 测试一下:

下面开始我们的小项目:

第一阶段

首先创建一个叫做MolMachineLearning的项目

scrapy startproject MolMachineLearning

创建好后进去到我们项目的文件夹下

cd MolMachineLearning

其下目录结构大概是这样:

接着我们就开始生成爬虫文件:

scrapy genspider arxiv "arxiv.org"

可以看到在spiders文件夹下已经生成好了我们的爬虫文件

编写数据结构items.py

编写爬虫文件arxiv.py

当然了,我们可以创建多个spiders

可以使用

scrapy list

来查看我们已经创建了的那些spiders

我们这里手动将start_urls改为我们目标的网址:

然后改写parse部分:

关于这里的Xpath怎么写,可以去看一下教程,或者还有一个方法,就是直接打开chome浏览器的开发工具下的elements

右键想要得到的Xpath处,选择Copy下的 Copy XPath即可得到

到此我们就算编写好爬虫文件啦!!

接着编写pipelines.py文件

这部分遇到两个问题:

开始的时候笔者是这样写的(错误的):

对比前后有两个不同,首先open的地方没有加上r

其次使用了utf8编码

导致的错误如下:

如果不加r那么路径会翻译转移字符\

第二个加了utf8后,笔者发现最后生成的txt文件中什么都没有,即数据没有写进txt文件中,去掉编码就可以啦,具体原因还不太清楚。

最后配置settings.py

这个的目的就是激活pipelines.py文件中的process_item函数执行,如果不配置,那么实际上pipelines.py是不会运行的

最后就是运行就可以啦:

scrapy crawl arxiv --nolog

注意是在如下目录下打开cmd运行的

结果:

第二阶段:

现在我们在第一阶段提取了论文题目,接下来要完成的目标是下载这些论文,框架的话还是和上面一样,这里简单说一下不同点吧:

一 :增加了一个url字段

items.py和arxiv.py修改如下

二 :使用了文件下载器FilesPipeline

pipelines.py修改如下

需要强调的是这里重写了一个类DownloadPapersPipeline,其重载了FilesPipeline,同时需要注意的是:

for paper_url in item['url']:

这句话中item['url']并不是我们理解的是由好多urls组成的,而是一个个单独的,所以在arxiv.py提取url字段的时候特意给其加了一个列表的形式,即如果不加这里[],那么比如对于一个url:https://arxiv.org/pdf/1904.05876.pdf,经过for paper_url in item['url']后提取出来的就是h啦,加上列表[https://arxiv.org/pdf/1904.05876.pdf],那么提取出来的就是正确的url啦,具体原因就是:pipelines.py文件是管道文件,它的执行不是等爬虫文件(arxiv)执行完,Item保存了所有数据,而是爬虫程序处理完一条数据后就会送到管道文件执行,所以送过去的是一条数据(理解有误,还望指正),总之想说的就是加[]

三 :设置配置文件

激活管道中相应的该类,同时设置pdf保存文件的路径。

运行结果:

会看到多了一个full文件,打开该文件:

已经下载好我们的文件啦,但是现在还有一个问题就是文件名不是我们想要的形式

我们可以利用我们提取的name字段来命名,需要注意的是:在win环境下文件名命名中是不允许有/ \ : * ? " < > |符号的,而从上面的例子中可以看到我们的论文题目中显然有的有冒号,于是我们要去掉这些特殊符号,方法多多,笔者这里用的就是re模块,不多解释啦,不是本文重点,感兴趣的可以百度一下

修改pipelines.py如下:

运行结果:

第三阶段:

如果你是想看看机器学习在各个领域的应用或者最近发表的机器学习文章有哪些?其实上面的例子就已经满足啦,可是假如我们只想获取某一方向的机器学习论文呢?那么我们就不得不进行一下筛选啦,假设我们现在只想要和深度学习有关的文章那么我们可以筛选题目中含有Deep的,当然了,为了使范围更广,我们可以多加关键字,比如通常CNN和RNN依据LSTM等等都是深度学习方面的论文,接下来我们就来干这件事情:

piplines.py修改如下:

可以看到,这里仅仅增加了红色框的部分,只有满足的item才会被返回,否则丢弃

settings.py修改如下:

需要说明的是:和之前对比,这里的又300 1 变为1和300 其实数字本身无多大意义,关键是相对大小,数字越小运行的优先级越高,这里将MolmachinelearningPipeline的优先级高于DownloadPapersPipeline即MolmachinelearningPipeline先运行,由于其内部实现了对item的过滤,过滤掉的数据之后不再传输给其他管道程序,所以MolmachinelearningPipeline中的item是过滤后的Item,达到我们的目的

运行结果:

结果下载的就只有深度学习方面的论文啦,注意这里是否能够精确的定位到你想要的论文的关键在于re模块正则化的应用,和爬虫本身并没有多大关系,为此这里不多这方面的解释啦

第四阶段:

做到这里,其实还没有结束,我们上面爬取的其实仅仅是一个页面的数据

而我们是想把最近的347篇都爬下来,怎么办呢?最通常的做法就是递归爬取

即在爬虫文件下的parse函数下加上

 urls = response.xpath('你的页数部分Xpath/@href').extract()for url in urls:yield Request(url, callback=self.parse)

但是笔者这里比较特殊:

会发现这里并不是全部显示,中间还有...,导致解析出来后是..,得不到这部分论文,解决的方法比较多,首先该网站做的比较好,可以通过点击more来增大步数,想这样:

还有就是点击all,即全部显示,这时候我们看一下其网址:

https://arxiv.org/list/cs.LG/pastweek?show=347

其实按月进行分割的

爬虫文件修改如下:

运行结果:

结束语:

其实即使全部下载下来也才300来篇,没有必要进行筛选,但是一旦数据量多了起来,其实第四阶段所做的事情还是很有必要的,这里之所以这么做是想尽可能的展现Scrapy的用法。

本文的主要目的:

通过本demo展现一下简单的框架:再写一遍很重要

items.py : 是数据结构,类似一个字典

spiders文件夹下的arxiv.py  : 是爬虫文件,具体的名字可以根据自己的需要进行定义

pipelines.py :管道文件,负责对爬取的数据进行处理包括过滤,保存,下载等等

settings.py : 配置文件,其中比较关键的作用是是激活管道文件的运行

Python Scrapy 爬取论文以及解决Unhandled error in Deferred问题相关推荐

  1. Python scrapy爬取京东,百度百科出现乱码,解决方案

    Python scrapy爬取京东 百度百科出现乱码 解决方案 十分想念顺店杂可... 抓取百度百科,出现乱码 把页面源码下载下来之后,发现全是乱码,浏览器打开 但是浏览器链接打开就没有乱码 以下是浏 ...

  2. Python+scrapy爬取36氪网

    Python+Scrapy爬取36氪网新闻 一.准备工作: ​ ①安装python3 ​ ②安装scrapy ​ ③安装docker,用来运行splash,splash是用来提供js渲染服务(pyth ...

  3. 如何用 Python + Scrapy 爬取视频?

    今天将带大家简单了解Scrapy爬虫框架,并用一个真实案例来演示代码的编写和爬取过程. 一.scrapy简介 1. 什么是Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框 ...

  4. 手把手教你使用Python+scrapy爬取山东各城市天气预报

    1.在命令提示符环境使用pip install scrapy命令安装Python扩展库scrapy,详见Python使用Scrapy爬虫框架爬取天涯社区小说"大宗师"全文 2.使用 ...

  5. python scrapy爬取HBS 汉堡南美航运公司柜号信息

    下面分享个scrapy的例子 利用scrapy爬取HBS 船公司柜号信息 1.前期准备 查询提单号下的柜号有哪些,主要是在下面的网站上,输入提单号,然后点击查询 https://www.hamburg ...

  6. 使用Python+Scrapy爬取并保存QQ群空间帖子

    首先声明,在Python和爬虫这方面,我是业余的那一卦,只是平时玩一玩,不能当真的,请各位大佬轻拍.虽然爬虫与传统意义上的大数据技术不属于同一类,但大概也只能放在大数据分类下面了. 今天接到了 @小阿 ...

  7. python Scrapy爬取天气预报,零基础的你也可以快速上手

    目的 写一个真正意义上一个爬虫,并将他爬取到的数据分别保存到txt.json.已经存在的mysql数据库中. 目标分析: 初学者有什么不懂的可以私信我--我刚整理了一套2021最新的0基础入门教程,无 ...

  8. 使用python scrapy爬取全国小区信息(包括小区价格,经纬度,面积,户数等),并保存到mysql和excel

    目标 此次爬取的网站是楼盘网,因为只爬取小区信息,所以先从深圳小区(http://sz.loupan.com/community/)网页入手分析,然后发散爬取至全国. 爬取的信息包括 省,所属市,所属 ...

  9. python scrapy爬取豆瓣即将上映电影用邮件定时推送给自己

    本文不是python.scrapy的教程,而是分享一个好玩的点子. python教程请看python教程,scrapy教程请看scrapy教程 爬取豆瓣高分电影教程参考python爬虫入门笔记:用sc ...

最新文章

  1. 开源人工智能算法一种新颖的超像素采样网络深层特征来估计任务特定的超像素
  2. 中文乱码各个浏览器的处理
  3. SAP系统怎样快速应对2019税改?
  4. sql2012简体中文版安装
  5. seL4操作系统基础06:dataport interface与seL4SharedData connector
  6. System V消息队列
  7. android布局及其常用属性
  8. 空间里相片批量导入u盘_怎么批量把空间照片保存到u盘
  9. DB2 DIgits函数用法
  10. Google Chrome谷歌浏览器繁体字修改为简体字
  11. 居然有比冰点更好的文库下载神器,能下载文库源文档?
  12. 微信小程序转发功能详解
  13. jQuery 事件冒泡
  14. wkhtmltopdf工具将html转换为pdf
  15. .NET 6 RC2 版本发布
  16. web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开
  17. 文件在计算机系统储存具体位置,电脑微信的文件储存位置怎么打开
  18. 计算机二级MS-Office真题及答案-历年汇总
  19. javascript ClientId用法
  20. APP被苹果审核团队拒绝的原因

热门文章

  1. 手撸一个Flutter插件实现跨苹果全家桶云同步持久化Key Value数据
  2. 毕业设计-基于协同过滤算法的高校图书书目推荐系统
  3. C++羽毛球馆场地预定系统
  4. 爬取天涯论坛数据,看看大家都在讨论什么
  5. [RK3399[NanoPC-T4][Android-Q]强调色
  6. 持续学习 (continual learning/ life-long learning)讲解
  7. 随着计算机科学技术和互联网,(题文)下列各句中加点成语的使用,全都正确的一项是、①随着计算机科学技术和互联网技术的快速......
  8. win10下载安装git(2.34.1)AND 配置
  9. 使用openSUSE
  10. JUC-9.“锁”事(显式锁与隐式锁/悲观锁与乐观锁/公平锁与非公平锁/可重入锁/读写锁(独占/共享/降级)/邮戳锁/死锁)、锁升级