动态网页抓取(Python实现爬虫时常见的8个难点及基本解决思路 )

优采云 发布时间: 2022-02-08 21:19

  动态网页抓取(Python实现爬虫时常见的8个难点及基本解决思路

)

  Python功能强大,熟练的程序员5分钟就能写出有价值的爬虫,比如:

  但是被抓到的网站大部分都不是木鸡给你抓的,被抓到了还会反抗!

  

  这是网站 和程序员之间的游戏!他们都是程序员,何必呢?程序员为什么要让程序员为难!

  

  任何游戏都不容易!因为路高一尺,魔高一尺。

  抓住他,他就会防守,你改进他的抓法,他就会提高他的防守和抓法!

  如果你抓住它,这不是对 网站 程序员的侮辱吗?

  

  如果有人问你:某个网站能被抓到吗?

  答案是肯定的:是的!

  从技术角度来说,只要能看到网页上的内容,绝对可以抢到!无非就是抓取难度的大小。

  本文总结了实现爬虫的8个常见难点及基本解决方案。

  1. 不小心爬进了监狱

  从技术角度看:世界上没有抓不到的网站!

  从法律上讲,有句话说:爬虫写得好,监狱饭早吃!我现在还有一个好哥们,说这话的时候我眼里含着泪。

  

  俗话说,线有规矩,爬虫有规矩!错误规则是 robots.txt。

  robots.txt 是 网站 写给爬虫的语句,声明内容不能被爬取。robots.txt 一般放在网站 的根目录下。

  以B站为例,直接在浏览器中输入:

  您可以看到以下内容:

  

  明确以“/include/”、“/mylist/”等开头的URL不能被抓取。

  如果你说不能逮捕你,就不要逮捕它,否则警察会逮捕你!

  

  但是国内很多网站不守规矩,不讲武功,网站里面也没有robots.txt。那我们该怎么办?

  可以看出几个方面:

  如果不确定能不能抓到,也可以直接联系网站的楼主问问能不能抓到,或者有没有数据接口。

  2. 复杂多变的网页结构

  网页的复杂性和可变性体现在两个方面:

  1.同一个网页在显示不同的内容时会有不同的结构。

  比如产品详情页,不同的产品,使用不同的网页模板,这是正常的情况。

  再比如产品列表页,没有产品,有一个产品,有多个产品,款式可能不一样。

  如果你的爬虫只处理一种情况,那么在爬取过程中必然会出现问题。

  2.网页功能或设计风格的变化。

  一般爬虫使用xpath根据网页的结构来解析内容。一旦结构发生变化,就无法解析。

  

  如何解决?

  3. IP 阻塞

  IP 拦截是一种常见的反爬虫方法。

  当网站 发现某个IP 地址发送的请求过多时,会暂时或永久阻止来自该IP 的请求。

  

  熟练又乖巧的网站一般会提前定好规则,比如一天只访问500次,或者一分钟不超过10次访问。

  超过次数自动屏蔽,超过时限自动解锁。

  技术不好的网站可能没有这样的规则,网站挂掉,或者管理员发现异常后,才查看日志才发现请求太多。

  因为他们没有现成的规则和技术手段,他们可能简单粗暴,直接在Web Server上设置永久封禁你的IP地址。

  处理IP阻塞的一般方法:

  4. 图片验证码

  图片验证码是另一种最常用的反爬技术。

  当你登录网站,或者检测到你的请求太多时,网站会弹出一个图片,要求你输入图片上的内容。

  图片上的内容通常是扭曲的文字,甚至是让你输入计算结果的数学公式。

  

  这一切都很好。一般使用OCR技术,比如Python的Tesserocr库,可以自动识别图片上的内容,然后自动填写,继续爬取。

  但是路高一尺,恶魔一尺高,图像验证码也在不断的进化升级,比如那些来自国外的,常常让我这个活生生的人哭泣:

  

  或 12306 像这样:

  

  简单的 OCR 技术很难处理此类图像,但总有一些方法:

  5. 蜜罐陷阱

  蜜罐陷阱是 网站 开发人员用来快速识别爬虫的一种肮脏技巧。

  

  添加一些到 网站 的链接,并通过 CSS 使它们对人类不可见:

  display: none

  爬虫在解析HTML的时候,可以找到这些链接,所以点击链接,爬进去。

  一旦爬进去,立即封锁你的IP。

  解决方法也很简单,就是在解析网页的时候加一些逻辑判断是否可见。

  6. 网页加载缓慢

  一些 网站 响应很慢。当请求量很大时,会时不时地失败。

  这对人们来说可能很好,只需稍等片刻,刷新页面就可以了。

  

  爬虫还需要添加相应的逻辑:

  7. Ajax 动态内容

  许多网站使用Ajax 来动态加载某些东西。也就是说,主请求只返回网页的主要内容,其他内容通过后续的ajax请求动态获取。

  以B站为例,视频详情页的HTML页面只有视频的基本信息,评论等都是通过后续的ajax请求获取的。

  我们用爬虫爬的时候,第一次只能拿到HTML,后面的内容是拿不到的。

  尤其是近几年,前后端分离流行起来,所有的数据都是通过Ajax获取的。得到的 HTML 页面只是一个空架子,里面没有任何数据。

  一般有两种解决方案:

  第一种方法是技术练习,但一旦分析,爬行速度会更快。

  8. 登录请求

  某些内容需要先登录才能访问。在这种情况下,请先阅读本文的第 1 点,以防止爬进监狱。

  

  但是如果是自己的账号,一般是没问题的。

  解决方案:

  9. 批量爬取

  专业的爬虫不会满足于简单的爬取。它的名字里有爬虫。它将抓取网页上的链接,并自动抓取链接中的内容。如果循环继续下去,整个世界都将被爬行。是吗。

  

  这带来了很多问题,仅举几个例子:

  当你面对这些问题时,爬虫问题就变成了“爬虫+工程”的问题。

  简单的解决方案是使用爬虫框架,比如Python中的Scrapy,它会帮你记录抓到什么,没抓到什么,设置抓取的深度和宽度等。

  

  稍微复杂一点,需要专业的团队,利用大数据技术做并发处理和数据处理。这是另一个层面的问题。

  这是我的一点经验和分享,不一定全面。

  关于Python技术储备

  学好 Python 是赚钱的好方法,不管是工作还是副业,但要学好 Python,还是要有学习计划的。最后,我们将分享一套完整的Python学习资料,以帮助那些想学习Python的朋友!

  一、Python全方位学习路线

  Python的各个方向都是将Python中常用的技术点进行整理,形成各个领域知识点的汇总。它的用处是你可以根据以上知识点找到对应的学习资源,保证你能学得更全面。

  

  二、学习软件

  工人要做好工作,首先要磨利他的工具。学习Python常用的开发软件就到这里,为大家节省不少时间。

  

  三、入门视频

  当我们看视频学习时,没有手我们就无法移动眼睛和大脑。更科学的学习方式是理解后再使用。这时候动手项目就很合适了。

  

  四、实际案例

  光学理论是无用的。你必须学会​​跟随,你必须先进行实际练习,然后才能将所学应用于实践。这时候可以借鉴实战案例。

  

  五、采访信息

  我们必须学习 Python 才能找到一份高薪工作。以下面试题是来自阿里、腾讯、字节跳动等一线互联网公司的最新面试资料,部分阿里大佬给出了权威答案。看完这套面试材料相信大家都能找到一份满意的工作。

  

  

  本完整版Python全套学习资料已上传至CSDN。需要的可以微信扫描下方官方CSDN认证二维码免费获取【保证100%免费】

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线