java抓取网页数据( #Python很强大,熟练的程序员可以在5分钟内写出一个有价值的爬虫)
优采云 发布时间: 2021-09-19 05:08java抓取网页数据(
#Python很强大,熟练的程序员可以在5分钟内写出一个有价值的爬虫)
####
Python非常强大。熟练的程序员可以在5分钟内编写一个有价值的爬虫程序,例如:-抓取股票信息-抓取笑话-抓取商品信息
但大多数被抓到的网站都不是你能抓到的木鸡。如果你抓住他们,就会有阻力
这是网站和程序员之间的游戏!所有的程序员,为什么?程序员为什么要打扰程序员
任何游戏都不容易!因为道有一英尺高,魔鬼有一英尺高
如果你抓住他,你就能阻止他。如果你改进抓取方法,他可以改进反抓取方法
如果你抓住了网站程序员,你不会侮辱他们吗
如果有人问你:某某网站你能抓住它吗
答案一定是肯定的
从技术角度来看,只要你能看到网页上的内容,你就能抓住它!这只是抓住的困难
本文总结了爬虫实现中常见的8个难点和基本解决方案
1.意外爬进监狱
就技术手段而言,没有什么是k17无法掌握的@
从法律的角度来看,有一句谚语:爬行动物在监狱里写得好,吃得早!我还有一个好朋友在那里。说到这里,我的眼里充满了泪水
俗话说,有规则,爬行动物有规则!错误规则是robots.txt
Robots.txt是写入爬虫程序的网站语句,表示无法对内容进行爬虫。Robots.txt通常位于网站的根目录中@
以桩号B为例,直接在浏览器中输入:
您可以看到以下内容:
它清楚地表明,不能捕获以“/include/”、“/mylist/”等开头的URL
如果你说你抓不到,就别抓,否则警察会抓你的
但中国的许多网站不遵守规则,不谈论军事道德,网站根本没有robots.txt。那又怎样
我们可以看到几个方面:-是敏感信息吗?如果它涉及私人敏感信息,不要抓住它-你抓了多少?一般来说,如果数量少就可以了。数量大时要小心。例如:偷10元不会坐牢,但偷10万元绝对可以逍遥法外
如果你只需要抓取自己的物品、电子邮件、账单等,通常没有问题
如果您不确定是否可以抓取,也可以直接联系网站所有者询问是否可以抓取或是否有数据接口
2.复杂多变的网页结构
网页的复杂性体现在两个方面:1.同一个网页在显示不同内容时会有不同的结构
例如,对不同的商品使用不同的网页模板是正常的
另一个例子是商品列表页面。没有商品,一种商品和多种商品。风格可能不同
如果您的爬虫程序只能处理一种情况,那么在爬虫过程中将出现问题
网页功能或设计风格的变化
一般爬虫使用XPath根据网页结构解析内容。一旦结构发生变化,他们就无法解析它
如何解决
无论网页结构如何变化,都可以完成一组代码。常规书写更好,准确性也很高
3.IP阻塞
IP阻塞是一种常见的反爬网方法
当网站一个IP地址发送太多请求时,它将临时或永久阻止IP请求
技术好,规则是网站一般提前设定的。例如,您一天只能访问500次,或者一分钟不能访问超过10次
超过次数后,您将被自动锁定并解锁
@技术差的网站可能没有这样的规则,网站挂断,或者管理员在查看日志后发现您的请求太多
因为他们没有现成的规则和技术手段,他们可能简单而粗糙,直接在web服务器上设置IP地址的永久阻塞
处理IP阻塞的一般措施:-不要频繁抓取,并在两个请求之间设置一定的随机间隔-摸索网站规则,然后根据规则抓取-使用IP代理服务不断更改IP地址。不要害怕与收费的IP代理一起花钱。如果你不想花钱,找一个免费的。在互联网上搜索。有很多免费的,但它们可能不稳定
4.图片验证码
图像验证码是另一种最常用的防爬技术
当您登录到网站或检测到您的请求太多时,网站会弹出一张图片,要求您在图片上输入内容
图片上的内容通常是扭曲的文本,甚至是数学公式,允许您输入计算结果
这很容易做到。通常,OCR技术,如Python的tesserocr库,可以自动识别图片上的内容,然后自动填充并继续爬行
然而,这条路比魔鬼高一英尺,图片验证码也在不断进化和升级,比如国外的谷歌验证码,这常常让我难以哭泣:
或12306:
简单的OCR技术很难处理此类图片,但总有办法:-人工智能技术之所以被称为人工智能,是因为它可以与人一样,甚至比人更聪明。来自北京大学、英国兰卡大学和美国西北大学的几位研究人员声称,他们研究了一种非常快速的方法,利用人工智能破解验证码——使用专业解码服务。有需求就有产品,专业的东西留给专业的人。一些公司提供相关服务。您可以调用他们的API或使用他们的插件来解决验证代码的问题
-人肉解码:当爬虫运行到验证码时,暂停,等待手动输入验证码,然后继续
5.蜜罐陷阱
蜜罐陷阱是网站开发者用来快速识别爬行动物的一个技巧
在网站上添加一些链接,并通过CSS使*敏*感*词*类看不到这些链接:
display: none
当爬虫解析HTML时,它可以找到这些链接,因此它单击链接并爬入
一旦你爬进去,立即封锁你的IP
解决方案也很简单。在解析网页时,添加一些逻辑来判断它是否可见
6.网页加载缓慢
一些网站报告说速度非常慢。当请求量很大时,它会不时失败
这可能对人们有好处。耐心等待,刷新页面
爬虫程序还应添加相应的逻辑:-设置合理的超时时间。太短的网页在加载之前会失败。如果它们太长,爬行将非常缓慢和低效-添加一个自动重试机制。但是,重试次数不应超过5次。如果你不能做三到五次,那么再试一次通常是没有用的。下次你可以再试一次
7.Ajax动态内容
许多网站使用ajax动态加载某些内容。换句话说,main请求只返回web页面的主要内容,其他内容通过Ajax请求动态获取
以站点B为例,视频详细信息页面的HTML页面仅收录后续Ajax请求获得的视频基本信息、评论等
当我们使用爬虫进行爬网时,我们只能第一次获得HTML,并且无法获得以下内容
特别是近几年,前端和后端分离非常流行,所有数据都是通过Ajax获取的。HTML页面只是一个没有数据的空架子
通常有两种解决方案:
-分析浏览器的web请求,找出后续请求是什么,然后使用爬虫启动相同的后续请求
-使用浏览器驱动的技术,如selenium。因为它们是通过用程序打开浏览器来访问的,所以后续的Ajax请求也可用
第一种方法是技术活动,但一旦分析,抓取速度会更快
8.登录请求
某些内容只有在登录后才能访问。在这种情况下,请看一下本文的第1点,以防止爬进监狱
但如果是你自己的账户,一般来说没问题
解决方案:
-如果您只是临时获取一些网站内容,您可以手动登录,分析浏览器的cookie,然后将相同的cookie添加到爬虫请求中
-对于简单登录网站,您还可以在脚本中自动填写用户名和密码,无需手动干预
-或者,当需要输入密码时,让爬虫暂停并在手动输入密码后继续爬虫
9.质量抓斗
一个专业的爬虫不会满足于简单的爬行。它的名字有爬行这个词。它将抓取网页上的链接,并自动抓取链接中的内容。如果它继续下去,整个世界都将是这样
这带来了很多问题。举几个例子:-需要爬网的网页数量巨大-爬网者可能会沿着链接爬回他们的主页-许多网页设置了重定向-爬网他们不需要的大量内容-爬网回大量数据
当你面对这些问题时,爬行动物的问题就变成了“爬行动物+工程”的问题
简单的解决方案是使用爬虫框架,比如Python中的scrapy,它将帮助您记录捕获的内容和未捕获的内容,