💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
爬虫的主要作用就是在网站互联的大网上收集、分析各种网页数据 工作原理也很简单,给爬虫一个URL,通过HTTP协议把HTML页面下载下来,分析里面的元素,比如说表单、表格、链接等 因为HTML页面是纯文本的,可以把它形成一棵DOM树,也可以使用正则表达式去获取想要的东西。 最重要的事,拿到这个页面的其他的链接,然后拿这些链接对应的HTML页面,继续分析,然后循环下去,把所有的页面找出来。 所以一个爬虫最基本的能力有: - 通过HTTP协议访问网页 - 分析HTML网页 ## 反爬虫 一般而言,如果在网站的根目录下放一个robots.txt,里面定义好那些内容对爬虫开放,当然这只是约定俗成的规范,而不是标准,所以总有爬虫不守规范。 作为程序,爬虫访问起网络来,比人类快很多,如果爬虫很多,会给网站带来非常大的流量,所以网站会想到很多办法来**反爬虫** 最开始的时候,爬虫在发出HTTP请求的时候,没有伪装自己,不会修改User Agent,所以网竞争力可以很容易的禁止我们。 > User Agent其实就是HTTP Header的一个字符串,让服务器能识别客户端的操作系统及版本,浏览器及版本,浏览器引擎、语音等。可以针对性的返回桌面版或者手机版的网页。 后来我们也可以把user Agent设置得和人类浏览器甚至伪装成Goolge的爬虫。 网站还可以分析我们的行为,比如说一秒之内有多少次请求,就认为是爬虫。 ## 陷阱、验证码 有些网站会在的网站发回的HTML页面里面包含一些人类肉眼看不到的链接,人类看不到,所以不会点击,但是爬虫能分析所有的链接,所以会踩到陷阱里面去。 这样,服务器就可以名正言顺的**封IP** 还有一招就是验证码,如果一段时间访问次数超过某个阈值,立刻显示一个图形验证码。现在验证越来越复杂,就算使用OCR也不行。 我们可以做分布式,让每个机器的爬虫运行得慢一点,不要触发封锁策略。 还可以使用代理,让IP不断变化 网站还有一种策略是,识别出是爬虫之后,返回一些假数据,和真实数据混在一起。 ## selenium 随着互联网技术发展,现在访问一个URL后,返回的HTML特别少,JS特别多,从HTML中几乎找不到有用的东西。 原来,网站都用JS在浏览器端渲染了。 这些JS通过AJAX方式访问后端网站的API,返回的都是JSON,只需要弄清API的输入和输出,直接调用API就可以拿到数据。 当时直接调用API的时候,也是有很多麻烦,比如需要进行认证,例如发个token 后来,干脆使用**无界面浏览器**,也就是内嵌浏览器,这个浏览器不需要界面显示,可以程序中静悄悄地执行。这样,就可以相当于一个真正的人类在请求网页,把JS下载下来,就在无界面浏览器中执行,等待渲染完了,就可以拿到HTML做后续的分析了