① 如何使用nodejs做爬虫程序
1、如果是定向爬取几个页面,做一些简单的页面解析,爬取效率不是核心要求,那么用什么语言差异不大。
当然要是页面结构复杂,正则表达式写得巨复杂,尤其是用过那些支持xpath的类库/爬虫库后,就会发现此种方式虽然入门门槛低,但扩展性、可维护性等都奇差。因此此种情况下还是推荐采用一些现成的爬虫库,诸如xpath、多线程支持还是必须考虑的因素。
2、如果是定向爬取,且主要目标是解析js动态生成的内容
此时候,页面内容是有js/ajax动态生成的,用普通的请求页面->解析的方法就不管用了,需要借助一个类似firefox、chrome浏览器的js引擎来对页面的js代码做动态解析。
此种情况下,推荐考虑casperJS+phantomjs或slimerJS+phantomjs ,当然诸如selenium之类的也可以考虑。
3、如果爬虫是涉及大规模网站爬取,效率、扩展性、可维护性等是必须考虑的因素时候
大规模爬虫爬取涉及诸多问题:多线程并发、I/O机制、分布式爬取、消息通讯、判重机制、任务调度等等,此时候语言和所用框架的选取就具有极大意义了。
PHP对多线程、异步支持较差,不建议采用。
NodeJS:对一些垂直网站爬取倒可以,但由于分布式爬取、消息通讯等支持较弱,根据自己情况判断。
Python:强烈建议,对以上问题都有较好支持。尤其是Scrapy框架值得作为第一选择。优点诸多:支持xpath;基于twisted,性能不错;有较好的调试工具;
此种情况下,如果还需要做js动态内容的解析,casperjs就不适合了,只有基于诸如chrome V8引擎之类自己做js引擎。
至于C、C++虽然性能不错,但不推荐,尤其是考虑到成本等诸多因素;对于大部分公司还是建议基于一些开源的框架来做,不要自己发明轮子,做一个简单的爬虫容易,但要做一个完备的爬虫挺难的。
像我搭建的微信公众号内容聚合的网站 就是基于Scrapy做的,当然还涉及消息队列等。可以参考下图:
具体内容可以参考 一个任务调度分发服务的架构
② 现在用node写网页爬虫用phantomjs和jsdom各有什么利弊
phantomjs实际上就是一个浏览器,只是不显示界面,可以执行页面的js脚本等。
jsdom主要是方便解析html文本,相当于对字符串进行分析。
phantomjs对资源的要求和消耗都比较大,如果需要的内容从网页源代码中可以解析出来,推荐用jsdom,如果页面复杂,推荐用phantomjs
③ 爬虫怎么爬取js后面加载的数据
推荐个很好用的软件,我也是一直在用的,就是前嗅的ForeSpider软件,
他有自己编写的脚本语言,网上通过js生成的内容都可以写几行脚本就可以采集数据了!!!!
我是一直用过很多的采集软件,最后选择的前嗅的软件,ForeSpider这款软件是可视化的操作。简单配置几步就可以采集。如果网站比较复杂,这个软件自带爬虫脚本语言,通过写几行脚本,就可以采集所有的公开数据。
软件还自带免费的数据库,数据采集直接存入数据库,也可以导出成excel文件。
如果自己不想配置,前嗅可以配置采集模板,我的模板就是从前嗅购买的。
另外他们公司不光是软件好用,还有自己的数据分析系统,直接采集完数据后入库,ForeSpider内部集成了数据挖掘的功能,可以快速进行聚类分类、统计分析等,采集结果入库后就可以形成分析报表。
最主要的是他采集速度非常快,我之前用八爪鱼的软件,开服务器采,用了一个月采了100万条,后来我用ForeSpider。笔记本采的,一天就好几百万条。
这些都是我一直用前嗅的经验心得,你不妨试试。
建议你可以下载一个免费版试一试,免费版不限制功能,没有到期时间。
④ 如果网页内容是由javascript生成的,应该怎么实现爬虫
对于提到的两种方法,抓包分析获取请求的参数和驱动浏览器内核执行 js 代码,两种方法各有优点,选择适合你的方式就好。
抓包分析,这个方法的优点是抓取的速度快,取得数据结构比较好,处理起来简单,很多是 json 格式的数据,但是抓包分析需要大量的时间,这里的时间是指需要模拟需要获取数据的之前的一个或者几个请求,涉及到 headers 里的很多参数,有时候还设计到数据加密,这个过程你可能需要读 js 源码,才能解决问题。所以这个方式适合那些请求参数较少,数据结构比较好的网站。
2. 驱动浏览器内核,这个方法的优点是编程实现比较简单,只要学会了驱动浏览器的 api 就可以在很少的改动下用于很多不同网站的抓取。但是缺点也很明显,慢,占用的资源比较多,不如抓包分析获取数据灵活。
我以前抓取的好多网站都是用抓包分析的方式,还分析了好多网站的登录的机制,用 Python 重写 js 的请求,做模拟登录,对于抓包分析有些偏执,但是我现在的观点是:用最少的时间成本来解决问题,这里的时间成本是指编程时间和抓取的时间之和。当然你如果是学习的话,我建议两种方式都学。
⑤ 前端js爬虫
纯粹前端的js 是不能 跨域 获取 cookie的
xxx.com 的js 代码 只能得到 xxx.com的cookie,拿不到 yyy.com
当然如果你有办法 在 yyy.com 写入受到自己控制的 html文件,你就可以写代码去拿到 对应的cookie,但看你的需求 应该你没有yyy.com 的权限
所以 要结合其他方案,推荐一下两种:
使用 electron ,electron 你可以认为是受js控制的浏览器引擎,所以你可以用它访问 yyy.com 拿到cookie,再接着做你的事情
或者 使用 puppeteer(Google 官方出品的 headless Chrome node 库)
Puppeteer 提供了一系列的 API,可以在无 UI 的情况下调用 Chrome 的各种功能,适用于爬虫、自动化处理等各种情景。
⑥ 为什么浏览器可以保存网页中js动态内容,用java编写的爬虫却无法抓取
爬虫最多只能抓取页面加载完毕时的内容,怎么可能慢慢等你网页后续动态显示出来的内容呢
⑦ 如何用Python爬虫抓取JS动态筛选内容
打开浏览器,以google chrome为例,输入你上面的网址。
然后按F12打开调试窗口,然后尝试勾选左边某一个选项,马上可以看到右边的调试窗口有东西输出。
找到第一个输出的行,点击header,可以看到每一个都是用的post方法。
所以只需要构造相应的header并post上去,就可以得到你想要的数据了。
而这个发放返回的是json数据,然后编码成dict格式 提取出数据就可以了。
⑧ php怎么用爬虫解析网页上js生成的图片
道理上讲不可行,不管是PHP还是python,爬虫技术用于抓取网页解析内容和静态内容,也就是在浏览器不解析js脚本时的网页内容,因为js脚本解析需要用到浏览器内置的js解析程序,而php和python简单爬虫都做不到这一点,如果是自己的网站抓取,用异步提交放到缓存里让后台脚本处理,如果是别人的网站就不用考虑了。爬虫程序要加上完整的脚本解析程序,还要保证定向抓取不拿到垃圾数据,当然如果你能做到这些,就可以去网络工作了