当前位置: 首页 > 编程日记 > 正文

Python爬虫小偏方:如何用robots.txt快速抓取网站?

640?wx_fmt=jpeg


作者 | 王平,一个IT老码农,写Python十年有余,喜欢分享通过爬虫技术挣钱和Python开发经验。

来源 | 猿人学Python


在我抓取网站遇到瓶颈,想剑走偏锋去解决时,常常会先去看下该网站的robots.txt文件,有时会给你打开另一扇抓取之门。


写爬虫有很多苦恼的事情,比如:

1.访问频次太高被限制;

2.如何大量发现该网站的URL;

3.如何抓取一个网站新产生的URL,等等;


640?wx_fmt=jpeg


这些问题都困扰着爬虫选手,如果有大量离散IP和账号,这些都不是问题,但是绝大部分公司都不具备这个条件的。


我们在工作中写的爬虫大多是一次性和临时性的任务,需要你快速完成工作就好,当遇到上面情况,试着看下robots.txt文件。


举个栗子:

老板给你布置一个任务,把豆瓣每天新产生的影评,书评,小组帖子,同城帖子,个人日志抓取下来。


初想一下,这任务得有多大,豆瓣有1.6亿注册用户,光是抓取个人日志这一项任务,每个人的主页你至少每天要访问一次。


这每天就得访问1.6亿次,小组/同城帖子等那些还没算在内。


设计一个常规爬虫,靠着那几十个IP是完不成任务的。


初窥robots.txt


当老板给你了上面的任务,靠着你这一两杆枪,你怎么完成,别给老板讲技术,他不懂,他只想要结果。


我们来看下豆瓣的robots.txt

https://www.douban.com/robots.txt


640?wx_fmt=png


看图片上面红框处,是两个sitemap文件

打开sitemap_updated_index文件看一下:


640?wx_fmt=png


里面是一个个压缩文件,文件里面是豆瓣头一天新产生的影评,书评,帖子等等,感兴趣的可以去打开压缩文件看一下。


也就是说每天你只需要访问这个robots.txt里的sitemap文件就可以知道有哪些新产生的URL。


不用去遍历豆瓣网站上那几亿个链接,极大节约了你的抓取时间和爬虫设计复杂度,也降低了豆瓣网站的带宽消耗,这是双赢啊,哈哈。


上面通过robots.txt的sitemap文件找到了抓取一个网站新产生URL的偏方。沿着该思路也能解决发现网站大量URL的问题。


再举个栗子:


老板又给你一个任务,老板说上次抓豆瓣你说要大量IP才能搞定抓豆瓣每天新产生的帖子,这次给你1000个IP把天眼查上的几千万家企业工商信息抓取下来。


看着这么多IP你正留着口水,但是分析网站后发现这类网站的抓取入口很少(抓取入口是指频道页,聚合了很多链接的那种页面)。


很容易就把储备的URL抓完了,干看着这么多IP工作不饱满。


如果一次性能找到这个网站几万乃至几十万个URL放进待抓队列里,就可以让这么多IP工作饱满起来,不会偷懒了。


我们来看他的robots.txt文件:

https://www.tianyancha.com/robots.txt


640?wx_fmt=png

640?wx_fmt=png


打开红框处的sitemap,里面有3万个公司的URL,上图是1月3号生成的,那个URL是根据年月日生成的,你把URL改成1月2号,又能看到2号的sitemap里的几万个公司URL,这样就能发现十几万个种子URL供你抓取了。


PS:上面的sitemap其实也能解决抓取天眼查最近更新的,新产生URL的问题。


小小的一个取巧,既降低了爬虫设计的复杂度,又降低了对方的带宽消耗。


这在工作中非常适用,工作中不会在意你用的框架多好,只在意你做事的快慢和好坏。


善于看robots.txt文件你会发现一些别有洞天的东西。


(*本文为 AI科技大本营转载文章,转载请联系原作者)


公开课预告

强化学习



本课程是一次理论+实战的结合,将重点介绍强化学习的模型原理以及A3C模型原理,最后通过实践落实强化学习在游戏中的应用。


640?wx_fmt=jpeg


推荐阅读

  • Google AI骗过了Google,工程师竟无计可施?

  • 重磅 | 阿里巴巴7亿元收购Flink商业公司,人和技术都有了

  • Istio调用链埋点原理剖析—是否真的“零修改”分享实录

  • 微软自证开源决心:GitHub 私有库免费无限开放!

  • 程序员有话说 | 同一起点的程序员,有人累到要猝死,有人清闲得要命

  • 2019八大科技趋势,指引你走向技术下一站

  • 重磅 | GitHub私有仓库从此免费,微软要赢开发者的心

  • 刚刚!程序员集体荣获2个冠军,这份2018 IT报告还说这些!

  • Python 2.7退休倒计时,Python 3必须学起来了(附入门学习资源)

相关文章:

八百客与51CTO结了梁子?

转载于:https://blog.51cto.com/simon/171348

特斯拉“撞死”机器人,是炒作还是事故?

作者 | 若名出品 | AI科技大本营科幻片里机器人大战的剧情可能离人类还很遥远,但设想一下,现实中机器人不受控制的打起架来...1 月 6 日,一辆处于自动驾驶模式的特斯拉 Model S “撞死”了一辆掉队 Promobot 的机器人。本次撞击事件发生在当地…

网页解析:如何获得网页源码中嵌套的标签。

一&#xff1a;前言&#xff1a;网页源码中有很多嵌套的标签 例如div标签嵌套如&#xff1a;bUTP<DIV>finally<div>aurora</div>126.com</div><div class\"Cited1\">ggff</div> 我们的网页解析工作中有时候需要解嵌套。通俗的讲…

36.intellij idea 如何一键清除所有断点

转自&#xff1a;https://www.cnblogs.com/austinspark-jessylu/p/7799212.html 1.在idea左下方找到"View Breakpoints"按钮,点击打开. 2.点击"Java Line Breakpoints"前方的全选框,取消全选. 3.点击上方"-"即"Remove"按钮,即可取消所…

Ruby与vim

介绍一点vim下使用Ruby的技巧。 1. vim命令行模式下输入 !ruby % 可以直接运行Ruby程序&#xff0c;并返回到vim编辑 2. vim Ruby关键字及自定义变量补全 拷贝附录中的ruby-macros.vim至机器某处&#xff0c;然后修改~/.vimrc&#xff0c;添加一行&#xff1a; source ROOT(…

NLP技术落地为何这么难?里面有哪些坑?

AI 很火&#xff0c;但是 AI 的门槛也很高&#xff0c;普通的开发者想要搭上这波 AI 红利依然困难。近期&#xff0c;人工智能公司推出了新一代智能 Bot 开放平台&#xff0c;它整合了小i机器人 Chatting Bot、FAQ Bot、Discovery Bot 三大核心能力&#xff0c;为企业和开发者提…

开源工具之valgrind

首先对源文件进行编译&#xff1a;Preparing your programCompile your program with -g to include debugging information so that Memchecks error messages include exact line numbers.-O0 a good idea if you can tolerate the slowdown-O1 line number in error message…

存储过程定义语法

CREATE PROCEDURE addTicket(in vipsql VARCHAR(255),in ordersql VARCHAR(255),in detailkey varchar(255),in detailsql VARCHAR(255)) comment 挂单&#xff08;售药窗口&#xff09; BEGIN DECLARE CONTINUE HANDLER FOR SQLEXCEPTION ,NOT FOUND rollback; start transac…

.NET : 针对Oracle的LOB数据访问

参考资料&#xff1a;来自Oracle官方网站 在 .NET 中使用 Oracle 数据库事务作者&#xff1a;Jason Price http://www.oracle.com/technology/global/cn/pub/articles/price_dbtrans_dotnet.html 在 .NET 中使用大对象作者&#xff1a;Jason Price http://www.oracle.com/techn…

MySQL数据类型--------浮点类型实战

1. 背景 * MySQL支持的浮点类型中有单精度类型(float), 双精度类型(double)&#xff0c;和高精度类型(decimal)&#xff0c;在数字货币类型中推荐使用高精度类型(decimal)来进行应用. * MySQL浮点型和定点型可以用类型名称后加&#xff08;M&#xff0c;D&#xff09;来表示&am…

山寨上网本溃败的两点教训

不是马后炮。08年11月份&#xff0c;笔者写过一篇《上网本难以复制山寨机的辉煌》&#xff08;以下简称《辉煌》&#xff09;&#xff0c;从消费取向和价格两个方面着手&#xff0c;分析认为山寨上网本市场有限&#xff0c;难以复制山寨手机的市场奇迹。现在看来&#xff0c;笔…

分享一个expect的脚本

分享一个expect的脚本&#xff0c;可以用于Linux机器之间远程执行命令&#xff1a; #!/usr/bin/expect -fset ipaddress [lindex $argv 0] set user [lindex $argv 1] set passwd [lindex $argv 2] set cmd [lindex $argv 3] set timeout [lindex $argv 4]spawn -noecho ssh $u…

今晚直播 | 深入浅出理解A3C强化学习

强化学习是一种比较传统的人工智能手段&#xff0c;在近年来随着深度学习的发展&#xff0c;强化学习和深度学习逐渐结合在了一起。这种结合使得很多原来无法想象的工作有了可能&#xff0c;最令我们瞩目的莫过于AlphaGo战胜李世石&#xff0c;以及OpenAI团队的机器人可以在团战…

正则表达式口诀及教程(推荐)

正则其实也势利&#xff0c;削尖头来把钱揣&#xff1b; &#xff08;指开始符号^和结尾符号$&#xff09;特殊符号认不了&#xff0c;弄个倒杠来引路&#xff1b; &#xff08;指\. \*等特殊符号&#xff09;倒杠后面跟小w&#xff0c; 数字字母来表示&#xff1b; &#xff0…

ssh其他机器的Expect脚本

ssh登陆其他机器的Expect脚本 #!/usr/bin/expect -fset user [lindex $argv 0] set ipaddr [lindex $argv 1] set passwd [lindex $argv 2]spawn ssh -l $user $ipaddrexpect "password:" send "$passwd\r" interact或者&#xff1a; #!/usr/bin/expect -f…

今晚8点直播 | 深入浅出理解A3C强化学习

强化学习是一种比较传统的人工智能手段&#xff0c;在近年来随着深度学习的发展&#xff0c;强化学习和深度学习逐渐结合在了一起。这种结合使得很多原来无法想象的工作有了可能&#xff0c;最令我们瞩目的莫过于AlphaGo战胜李世石&#xff0c;以及OpenAI团队的机器人可以在团战…

40.lombok在IntelliJ IDEA下的使用

转自&#xff1a;https://www.cnblogs.com/yjmyzz/p/lombok-with-intellij-idea.html lombok是一款可以精减java代码、提升开发人员生产效率的辅助工具&#xff0c;利用注解在编译期自动生成setter/getter/toString()/constructor之类的代码。代码越少&#xff0c;意味着出bug的…

C++之Boost使用

1. Get & Build & Install Boost download boost from http://www.boost.org/ 进入boost目录&#xff0c;使用命令&#xff1a; ./bootstrap.sh --prefixpath/to/installation ./b2 install 如此之后&#xff1a; leave Boost binaries in the lib/ subdirectory…

这就是芬兰:先让全国1%的人学起AI!

译者 | 大鱼责编 | 琥珀出品 | AI科技大本营【AI科技大本营导语】全球最大的手机制造商诺基亚、著名游戏《愤怒的小鸟》的开发商 Rovio&#xff0c;这两大曾名噪一时的科技公司都来自同一个国家——芬兰。很多人会问&#xff1a;在如此激烈的竞争环境下&#xff0c;为什么如此小…

Linux 裸设备基础知识(转)

1、裸设备定义&#xff1a;一块没有分区的硬盘&#xff0c;称为原始设备(RAW DEVICE)或者是一个分区&#xff0c;但是没有用EXT3,OCFS等文件系统格式化,称为原始分区(RAW PARTITION)以上两者都是裸设备 2、裸设备的绑定有文件系统的分区是采用mount的方式挂载到某一个挂载点的…

吴恩达与LG握手合作!

图片来自LG官网作者 | 琥珀出品 | AI科技大本营在近日举办的 CES 大会上&#xff0c;人工智能领域知名科学家、Landing.ai 创始人兼 CEO 吴恩达&#xff08;Andrew Ng&#xff09;与 LG&#xff08;LG Electronics&#xff09;总裁兼 CTO IP. Park 在拉斯维加斯签署了战略合作伙…

linux上安装mysql,tomcat,jdk

Linux 上安装 1 安装jdk 检测是否安装了jdk 运行 java –version若有 需要将其卸载a) 查看安装哪些jdk rmp –qa |grep java b) 先卸载openjdk 1.7 c) 在卸载openjdk 1.6 使用rpm –e - -nodeps 卸载的包 安装jdka) 上传jdk到linux 使用Xftp5…

现代人的无知什么样

以前没有知识的人就是无知&#xff01; 但现在变了&#xff01;一个博士却不会用他的知识挣钱养家糊口算不算无知&#xff0c;一个人大学毕业却不会学习算不算无知&#xff0c;一个经理在自己的电脑上找不到自己存的东西算不算无知&#xff0c;有知识却不会表达的人算不算无知…

zz Expect的安装

转载一篇靠谱的文章&#xff0c;按照文章所述方法一次成功。只不过我的expect二进制文件最后实在tcl的bin目录下&#xff0c;而不是expect的bin目录下&#xff0c;这个令我有些疑惑&#xff0c;whatever&#xff0c;不算什么大问题&#xff0c;注意一下就好了。A. Tcl 安装 主页…

分享一个ssh打通的脚本

分享一个ssh打通的脚本&#xff0c;经过测试可用。目前只能单向打通&#xff0c;且要求本地用户名为admin(写入代码&#xff0c;可简单修改)。本身只是个人使用&#xff0c;故通用性、异常情况考虑不多&#xff0c;大家可以做个参考。 补充一点&#xff0c;Important Tip&…

从云计算到AI:NetApp的数据网络转型之道

毫无疑问&#xff0c;在 AI、大数据、云计算等新技术潮流的冲击下&#xff0c;各行业企业的数字化转型进程日益加速&#xff0c;社会正在进入一个全新的数据融合时代。这一过程中&#xff0c;人们一方面对技术予以高期待&#xff0c;期望给行业进行业务重构&#xff0c;但另一方…

侧方位停车技巧

侧方位停车技巧 侧方位停车相对来说是比较容易的&#xff0c;只要掌握要领就能够正确地倒入车位中。具体要领如下&#xff1a; 第一步先打右转向灯&#xff0c;挂倒档&#xff0c;保持车辆平稳、缓慢地倒车&#xff1b;第二步回头看桩&#xff0c;当右后车门三角窗中部与1号桩&…

微信是把“杀猪刀”,还改变了我的表情包

整理 | Jane出品 | Python大本营1 月 9 日上午&#xff0c;一年一度的微信公开课 PRO 在广州举行&#xff0c;会上发布了《2018微信年度数据报告》。报告的第一部分是 2018 年微信用户活跃数、发送消息与音视频通话数据&#xff1b;第二部分根据微信用户画像&#xff0c;针对不…

中缀、前缀表达式

为什么80%的码农都做不了架构师&#xff1f;>>> 一、后缀表达式求值 后缀表达式也叫逆波兰表达式&#xff0c;其求值过程可以用到栈来辅助存储。假定待求值的后缀表达式为&#xff1a;6 5 2 3 8 * 3 *&#xff0c;则其求值过程如下&#xff1a; 1&#xf…

Linux之tee命令

语  法&#xff1a;tee [-ai][--help][--version][文件...]补充说明&#xff1a;tee指令会从标准输入设备读取数据&#xff0c;将其内容输出到标准输出设备&#xff0c;同时保存成文件。参  数&#xff1a;-a或--append  附加到既有文件的后面&#xff0c;而非覆盖它&…