爬虫项目(二)用phantomjs做爬虫

来源:互联网 发布:微信朋友圈网络出错 编辑:程序博客网 时间:2024/05/16 03:49

这几天有事没怎么研究,最开始用的java爬虫想爬取携程,结果失败告终。

主要表现在:

1.抓取不到对应的标签,jsoup语法对应的element个数是0,推测是因为直接用get方法获取机票信息时,该网站不显示和价格信息有关的elemengt,故抓取不到。

2.抓取到的数据是错误的。价格和真正标价的相去甚远。

据说qunar和xiecheng之类的网站在反爬虫上下了些功夫。为了达到目标我也进行了一些尝试,屡败屡战,修改了一下爬虫代码,和思路。今天尝试了phantomjs做爬虫,成功爬取了,phantomjs脚本文件的代码好像是js代码,和JAVA也差不多,很容易上手。

方法1.访问网站的手机版,下个浏览器的user-agent switch插件,把agent改成手机浏览器就成。然后照常执行爬虫任务,相对的手机网页比电脑版简洁好抓一些,但是还是failed。

方法2.增加请求头伪装浏览器,和真实浏览器差别太大,无效,failed。

方法3.既然不给非浏览器发数据,那我就用真浏览器,phantomjs开源浏览器内核,说白了就是一个没有GUI的浏览器,需要通过操作台和代码行使用,当然好处就是开源的东西可以整进自己想要的功能,比如爬虫。

暂时放下前面的java爬虫,用phantomjs来做个小爬虫,专门爬机票。最后经过尝试,success。只是暂时尝试,代码很简单,参照API写的:

var page = require('webpage').create();phantom.outputEncoding="gbk";page.open('http://flights.ctrip.com/booking/XMN-BJS-day-1.html?DDate1=2017-02-18', function (status) {    var flight = page.evaluate(function () {        return document.getElementById('J_flightlist2').textContent;    });    console.log(flight);phantom.exit();});
抓取的数据如下图:



因为和jsoup的用法有点出入,暂时没细写,直接抓了一小片的数据,看起来有点杂,而且直接抓取价格位置的标签还是抓取不到。已经实现数据整个加载,推测携程的防爬虫规则应该是需要载入某个不相关标签后才会显示价格。后续再提取也没问题,数据既然都获取到了,筛选就不是什么难事儿了。同样,如果有进展的话还有后续文章。

Tips:

在phantomjs使用的时候,返回cmd命令行的中文数据是乱码的,这个问题是因为有些网站采用的是GBK编码,而phantomjs默认编码是UTF-8,在代码行里插入下面这句代码,可以改变编码,解决中文乱码的问题。

phantom.outputEncoding="gbk";修改输出编码,解决中文乱码的问题。

0 0