手把手教你爬取途牛网旅行路线数据,告诉你五一去哪儿玩!

640?wx_fmt=gif

640?wx_fmt=jpeg

作者 | timber

本文经授权转自数据森麟(ID: shujusenlin)

五一假期将至,送给大家一个用于途牛网爬取旅行线路线获取的爬虫,预祝大家都度过一个愉快的五一假期。

本爬虫最先是用 Scrapy 写的,很多地方没完善好最终停歇了(定制起来比较难),笔者觉得用 Scrapy 展示出来并不是那么优雅,所以就拆了出来。主要运用到的知识点:PyQuery、Selenium、MySQL、ip_pool、进程,因为代理池是花了钱的,所以文中还是次要说一下方法就好了。免得一些调皮捣蛋的小伙伴瞎整。

 

640?wx_fmt=png

页面分析

 

OK!进入正题,首先把该装的库装好,假设你在运行过程中出现 no model name xxxxx,你就 pip install xxxxx。首先来分析一波页面,罗列一下需要抓取的字段:

640?wx_fmt=png

好的冷饭炒完,如果是新手,可以花个十来分钟去看一下 https://blog.csdn.net/weixin_42946604/article/details/86346615 这个小教程,了解具体怎么分析网页。笔者此次采用了 Selenium+Chrome 来抓取,我把它归在一起了,大家可以浏览一下我这具体的 Chrome 选项参数(自带注释):

640?wx_fmt=png

这里提一下 Selenium 防检测的问题(非必须),如果你抓取过X团外卖的话,你会发现使用 Selenium 直接打开网页去请求的话,会出现这种问题。当然你可以加载电脑上的 Chrome 浏览器路径进来。

640?wx_fmt=png

我采用了遍历 url_list 来抓取多个链接,如果过多了不是那么好看。

640?wx_fmt=png

你可以往里面继续加,然后使用 for 循环逐一去请求就好了,接着就是获取到旅游产品的页面数,再把每一页的数据下载下来交给 data_save() 方法处理

640?wx_fmt=png

这样是不是一只爬虫就写好了呢!真的上手简单,实用性也高。

 

640?wx_fmt=png

代理池处理

 

过程中建议也可以去买,钱不多,少抽一包烟 or 少撩一次妹一个稳定实用的代理池就有了。免费的代理,除了免费啥作用都起不到,而且很多小伙伴测试随机代理的时候,完整获得请求之后返回的结果,开心得不行了,但是不到一段功夫爬虫就嗝屁了。这种情况代理的匿名性也是很重要的。

假设1:你的代理已经在数据库中了,字段类似我这样的话,需要像这样拼接起来:

https://192.168.1.1:8080 

640?wx_fmt=png

我自己是在同一个文件夹下,另外创建了一个 PY 文件用于测试&获取代理

640?wx_fmt=png

代理测试就是另一个小爬虫,使用代理去请求,例如你可以去请求这个http://www.ip138.com/(IP 地址查询),请求返回的结果需要做字符编码问题,该网站是使用 GB2312。

640?wx_fmt=png

然后只要判断获取的 IP 不是你本机的就行了,我是这样做的: 

640?wx_fmt=png

我是每次抓取完一个产品就更换,换页不做更换

 

640?wx_fmt=png

JS 加载问题

 

这也是很常见的,不是所有情况下 bro.get(URL) 让返回结果,所有数据就都出来了,很多情况下数据是要触发事件来产生的,例如《刺激战场的官网》。

640?wx_fmt=png

Selenium 的事件操作方法健全,让爬虫更像用户,让站长更分辨不清是真用户假用户,就让你抓狂!

我使用的方法还是挺老套的,直接 copy 我以前文章的代码,贴上来的:

640?wx_fmt=png

 

640?wx_fmt=png

数据存储

 

640?wx_fmt=png

本文使用 PyMySQL,使用完随手关门习惯,“用完记得洗手【手动滑稽表情】”。

 

640?wx_fmt=png

点火,出发!

 

让爬虫骑上你的大奔,轮子越多,跑得越快(当然要考虑到你电脑的处理能力):

笔者因为穷得叮当响只能开嘉陵摩托车,两轮!

640?wx_fmt=png

点火,出发:

Tip:记得遵守交通规则,做个好市民哟

640?wx_fmt=png

另附本文代码:https://pan.baidu.com/s/1TElQPWPG8ltudFP1pTo8bg 提取码: vwns

吴恩达:创造13 万亿,这类程序员2019彻底崛起!BAT 大厂确认!

https://edu.csdn.net/topic/ai30?utm_source=cxrs_bw

 

作者:timber ,在一家电子商务(外贸)公司任职运维,平常工作时我觉得敲命令的样子也很帅,个人博客地址 https://blog.csdn.net/weixin_42946604

640?wx_fmt=png

640?wx_fmt=jpeg

作为码一代,想教码二代却无从下手:

听说少儿编程很火,可它有哪些好处呢?

孩子多大开始学习比较好呢?又该如何学习呢?

最新的编程教育政策又有哪些呢?

下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)

戳他了解更多↓↓↓

640?wx_fmt=jpeg

 热 文 推 荐 

 阿里半跪过,任正非差点跳楼,京东被骗光钱:成年人的生活哪有容易二字?

 五日间,Bug 灰飞烟灭

阿里 P9 级面试官是如何 360° 无死角考察候选人的?

真の硬核粉丝!小学生也参加杨超越杯,作品优秀!

当过爱因斯坦助理,参加过曼哈顿计划,他还发明受欢迎的编程语言 | 人物志

 17篇论文入选CVPR 2019,百度AI都在关注什么?(附论文地址)

☞ 强推!盘点阿里巴巴 15 款开发者工具 | 程序员硬核评测

☞ 不改变比特币, 如何扩容?

☞ 她说:为啥程序员都特想要机械键盘?这答案我服!

 

System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"

你点的每个“在看”,我都认真当成了喜欢
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值