20180807_Scrapy源码第一天
(只是为了记录自己对于scrapy框架的学习路径)
废话不多说先上图(跟先人学的)
老板要求,写个爬虫框架出来,结果自己直接import scrapy,被老板劈头盖脸骂过来,直接怂的不行,认错,收拾心情开始看源码。鉴于之前写的一部分scrapy的代码,结合上面的这个图,第一天也就说说自己对scrapy框架的一些基本理解。
目前我做的工程,主要目的是爬取,百度学术的一些论文数据。包括它的标题,摘要,作者等等。从这个工程的分布来看,主要有几个模块。
第一个模块就是spider里面的py文件,这个文件规定了一些基本信息包括爬虫的名称,start_url,以及页面response的主要解析过程。
我这边用parse来处理主要的url以及获取下一页url,再用request方法,callback里面设置parse_detail方法去解析每一个具体论文的网页。
有别的大神说如果你的爬虫写的够完美,利用了scrapy框架之后,遇到新的网站,你只要修改一个parse解析方法,就可以了。我不知道是不是吹牛皮,但至少现在看来,还是要修改很多东西的。包括item,数据库连接等等。
第二个部分就是item的部分。在其他地方好像也叫管道,他规定了scrapy存储下来数据的方式。在第一个模块中进行声明和实例化:
这个跟上面的parse_detail相对应。
第三个部分就是middleware,pipeline部分,其实实质上可以把两个都看成中间件,一个是固化中间件,一个是存储中间件。白话说就是,,,,middleware就是每次你跟网页请求的时候,过去的request经过一下middleware中间件,稍微给你做一个处理:
比如我这边就写了一下这个类,然后利用里面规定的process_request方法来处理并返回request,接受spider是为了跟你第一部分声明的spider相对应。这边有两种方法,一种是直接用spider的name跟middleware对应,一种是用meta,自己上去第一部分找一下meta的句子你就懂了,为什么在详情界面需要meta?因为需要点击“更多”这个按钮,来确保摘要加载完全。
接下来就是pipeline,你可以理解为管道,存储用的。我这边写了两个,一个是把结果写成json的class,另一个是把结果存到数据库的class:
好了,管道都铺好了,你们应该可以发现,上面的都是类,怎么实例化?或者说,怎么调用里面的方法?那就要说到最后一部分,setting了,设置管道在那儿,设置middleware在那儿,设置spidername,初始化等等。
具体运行机制或者说怎么调用我还不太清楚,但是这边就这么设置,最后还有两个要设置。
一个是浏览器非机器人模式,也就告诉浏览器,这不是一个robot在偷你东西。
另一个是利用user_agent.
两个都是为了防止浏览器反爬虫,都在setting里面加进去就好了。还有好多东西比如设置代理ip等等,我还没看,等看到再详谈。
第一次写,希望可以坚持下去,希望可以加油。
有什么不对的地方,欢迎大家狠狠批斗我,不能误导他人,谢谢。