scrapy到底功能有多强大?是不是用它就能爬绝大部分网站呢?

scrapy并不是银弹,scrapy所关注的问题并不是你说说的实现绝大部分网站的爬行,而是提供了一个框架,按照我的理解就是一个大而全的平台,你只需要按照说明书在相应的模块中完成相应的配置,就可快速高效的进行爬取。同样的事情,手写requests同样可以完成,同样的话,手写requests可以实现爬取大部分网站吗,答案是:“是的”。
■网友
看着我的问题挂在上面没人鸟,还一直在等答案,就过来刷波存在感哈,写写我对scrapy的认识,上有很多帖子都说过的,我这种弱渣需要隐身技能。1.首先,scrapy是一种流程化的抓取过程,爬虫也无非是request和response,你只要稍微了解你访问一个网址发生了什么过程,需不需要post参数啊,返回的数据是html还是json啊,一般f12或者chrom fiddler等抓包工具都能帮到你,我推荐还是f12,足够了。scrapy清晰地分出了抓取,分析,清洗后数据处理等几个模块,任何一种能访问url的语言,应该都能做到爬虫的功能。但为什么说scrapy强大,就是在于scrapy的规范化和可扩展性,它的中间组件随便你添加的,比如你想在down之前先对request进行封装,加proxymiddler,useragentmiddler...都是很简单的,在settings.py中声明就好了;比如对返回的response进行解析,能在pipelines.py中写对应的处理类,可以处理多次,分别导向也是可以(就是一份存数据库,一份存json...)有优先级的设定,先处理哪个再处理哪个都是可以的,也都是通过settings.py来启用。2.其实正常能够模拟url访问的语言都能做爬虫,这时候还需要考虑网页中的动态内容,比如ajax异步传输的数据,比如js的接口访问。前者你可以使用scrapyjs+splash来渲染,调用webkit访问,相当于开了一个浏览器去访问某个url,你再去处理返回的数据,这时候都是动态加载过的了。这个东西有个局限就是:docker的服务有资源限制这一说法,能够渲染的页面有限,我现在的做法是定时重启,正在考虑搭建一个docker集群,去处理大量需要渲染的页面。还有的js接口访问,这时候你需要抓包,找到一个真实的url,传递相应的参数,才能拿到对应的数据。3.爬取app,这个后续补充,现在正在做......4.各大网站的指数:百度指数,微指数,因为是加密传输,这样网站的现在比较通用的做法是ocr截图识别。5.打包类的,本质是抓包,如果你要抓的包有个发送的规律(也是url和post参数),应该也能都获取到。综合的话,scrapy能够爬取绝大部分的网站。暂时匿了,有空再来刷存在感,加油楼主。


    推荐阅读