爬虫项目(二)用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";修改输出编码,解决中文乱码的问题。
- 爬虫项目(二)用phantomjs做爬虫
- 网络爬虫项目开发日志(二):爬虫架构设计
- 爬虫入门五(Phantomjs和selenium)
- [笔记] PhantomJS爬虫小记
- 爬虫利器:Selenium+PhantomJS
- phantomjs+selenium+python爬虫
- 爬虫工具:PhantomJS
- 爬虫利器之PhantomJS
- 爬虫学习-phantomjs
- 爬虫-08-selenium & phantomjs
- python爬虫——用selenium和phantomjs对新浪微博PC端进行爬取(二)
- Java之网络爬虫WebCollector+selenium+phantomjs(二)
- Java之网络爬虫WebCollector+selenium+phantomjs(二)
- 用Jsoup做“爬虫”
- 用Nodejs做爬虫
- Scrapy+PhantomJS+Selenium动态爬虫
- Scrapy+PhantomJS+Selenium动态爬虫
- Scrapy+PhantomJS+Selenium动态爬虫
- java并发编程实践学习(5)构建块为计算结果建立高效,可伸缩的高速缓存
- 1106. Lowest Price in Supply Chain (25) PAT甲级
- uva 753 A Plug for UNIX
- 使用 Python 读取 8 GB 大小的文件
- 32位线性地址—两级页表
- 爬虫项目(二)用phantomjs做爬虫
- 冒泡排序
- 关于List集合转化为数组
- 2.4 VB编程基础--常量
- (二十)文本流与数据流
- 使用Jsoup解析网页
- linux的gdb总结
- 产品研发记录05:产品研发人员应当具备的特质
- Android studio2.2.3 支持Java8