我是一个爬虫

如何设计一个网络爬虫? 在本章中,我们首先讨论了好的爬虫的特点:可扩展性、礼貌性、可扩展性和鲁棒性。然后,我们提出了一个设计并讨论了关键组件。构建一个可扩展的网页爬虫并非易事,因为网页数量庞大且充满陷阱。• 服务器端渲染:许多网站使用如JavaScript、AJAX等脚本在加载中生成链接。如果我们直接下载和解析网页,我们将无法获取动态生成的链接。为了解决这个问题,我们在解析页面之前首先进行服务器端渲染(也称为动态渲染)。 阅读详情

诞生

我是一个Web Crawler , 有时候称为Spider , 你们经常说的爬虫就是我。

我想我是遇到了好时代,感谢IT政府,提供了简单的HTTP协议,还有HTML,CSS, JavaScript这一系列开放的技术, 原来的桌面应用,局域网应用都被搬到了网络上,形成了一个个的网站, 网站互联起来,形成了一个覆盖全世界的大网。

在这个大背景下,我应运而生,开始在这个大网上爬来爬去,收集、分析各种网页的数据。

我有几个亲戚在搜索引擎公司工作,听说他们的目标是把全世界的网页都给爬下来,形成索引,让人类搜索, 想想全世界网页的数量,这几位亲戚的工作实在是让人敬畏。

我的工作原理非常简单, 给我一个URL,我就可以通过HTTP协议把HTML页面下载下来。然后分析一下这个页面中有哪些元素,比如说,表单,表格,链接等等。

反正这个HTML页面是纯文本的,我想怎么折腾都可以,我可以把它形成一颗DOM树,也可以用正则表达式去获得一段我想要的内容,总之方法多得很呢!

最重要的是,我要拿到这个页面中的其他链接, 然后再拿到这些链接对应的HTML页面,继续我的分析,如此循环下去,就能把所有的页面给找出来了,所有的内容都尽在掌握!

有时候,有些HTML页面是受到保护的,必须登陆以后才能够访问,这也难不住我,人类早已经申请了很多的账号。我把这些用户名和密码拿过来,找到对应的登录框,向服务器端发送一个请求,就可以顺利登录了, 访问受保护网页的大门就敞开了。

所以说我有两个最基本的能力, 第一,通过HTTP协议访问网页;  第二,分析HTML网页。

斗争

所谓“爬亦有道”, 我们爬虫界也是有一定规范的,比如说,你在你的网站的根目录下放一个robots.txt文件,里边定义好那些内容对爬虫开放,那些内容不希望爬虫访问, 那我们就不会去爬这些内容了。

当然这只是个约定俗成的规范,而不是标准, 所以总是有一些爬虫完全不遵守规则,置这些规范于不顾。

作为程序,我们访问起网络来, 要远远比人类快得多,人类还需要在界面上移动鼠标点击,我们则是拿到URL后直接、迅速、毫不犹豫地访问, 这样一来,如果爬虫很多,常常给一些网站带来非常大的流量,给服务器带来很大的压力,影响了正常用户的访问, 从而影响了网站的收入。

断人财路,网站就急眼了, 肯定要反击, 于是他们网站便提出了各种各样的办法,成为反爬虫。 他们有反爬虫, 我们便反反爬虫,于是便引发了一场波澜壮阔,反复拉锯的战争。

首先他们得把我们给识别出来才行。最早爬虫在发出HTTP请求的时候,不注意伪装自己,不会修改User Agent ,相当于告诉对方说: 我是爬虫。

于是这些网站轻轻松松的就把我们识别出来,返回一个错误码,或者干脆禁止我们访问。

什么? 你还不知道什么是User Agent ?

User Agent其实就是HTTP Header 中的一个字符串,让服务器端能识别客户端的操作系统及版本,浏览器及版本,浏览器引擎,语言等等信息。 这样可以针对性地做一些处理,例如发送桌面版或者手机版的网页。

比如: User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)

后来我们也学精了,把这个User Agent 设置得和人类的浏览器一模一样,对方就不好识别了。

有时候我们还可以伪装成Google的爬虫,百度的爬虫, 各个网站自然希望百度和Google去对自己的网页做索引的,所以对这样的User Agent不会下狠手拒绝。

但是他们也有别的办法,比如分析我们的行为,利用我们速度快的特点, 比如说,一秒之内有多少次请求,就认为是爬虫。

我们也得斗智斗勇,访问一会儿就休眠几秒钟,然后接着再访问,让他们的策略失效。

但是我们也不能老是休息呀,如果休息得太多,那我们就会人类的速度差不多了,爬虫还有什么意义?

陷阱,验证码,投毒

有些网站会采取一些非常“恶劣”的手段,我最难以防范的就是陷阱。

具体来说,就是在网站发回的HTML页面中,包含一些人类肉眼看不到的链接,比如弄个一个像素大小的图片,上面有个链接。

人类看不到,是绝对不会点击的,但是我们爬虫是程序啊,能分析所有的链接并访问之。 但是以我们的智商,并不知道这是一个陷阱啊!

这些陷阱就像漂浮在网页中的幽灵, 只要我们一访问这些链接,服务器立刻就会知道,哼哼,又来一个爬虫,立刻启动大杀招:封IP!

他们还有一招就是验证码, 如果一段时间内访问的次数超过了某个阈值,立刻显示一个图形验证码,输入验证码以后才能继续,这实在是太讨厌了, 因为验证码是个图片, 人类肉眼轻松识别,可是我想识别还得靠别的软件或者系统,比如OCR。

但是验证现在搞得越来越复杂,什么滑块验证,什么数学题...... 单纯的OCR都不够了。

不过我也不怕,我可以做分布式,反正机器多,让每个机器上的爬虫运行得稍微慢一点,不要触发服务器端的各种讨厌的封锁策略。

我还可以用代理,让IP不断变换,封了一个IP, 就用另外一个,子子孙孙无穷匮也。

我最烦的就是“投毒”,这一招最损, 网站识别出来我是爬虫以后,并不会把我的IP关到小黑屋,而是很阴险地发送一些假数据,和真实数据混在一起,让我喜滋滋地取走,不知道过了多少天,主人用数据做分析时才发现: 嗯,这数据有点不对头啊! 到底是怎么回事!!!  于是我被拖出去打了50大板,真是冤枉啊。

新装备

最近的日子有点不大对头儿,访问一个URL后,返回的HTML特别少,JS特别多,我从HTML中几乎找不到什么有用的东西。

主人看到我干活效率骤然降低,赶紧亲自上手研究了一番,他用Chrome打开网站,按F12, 查看源代码和网络请求, 叹了一口气说: “原来的办法都不管用了,这些网站都在用JavaScript在浏览器端渲染了!”

不过他接着又兴奋地说:“这也许是一件好事情,这些JavaScript通过AJAX的方式访问后端网站的API,返回的数据都是JSON,我分析下,只要弄清楚这些API的输入和输出, 直接调用API就可以拿到数据了。”

其实都是分析,只不过原来分析HTML结构,从中取出内容,现在是分析后端服务器提供的API,直接获取到了数据,似乎更加方便。

但时候直接调用这些API也是有点小麻烦,比如很多时候,都需要进行认证,比如发个token什么的给服务器,要不然人家就不让调用。

后来主人说,算了,实在是麻烦,我给我的爬虫升级下装备吧。

新装备其实就是一个内嵌的浏览器,这个浏览器不需要界面显示, 可以在程序中静悄悄地执行,主人把他叫做无界面浏览器,或者无头浏览器。

(码农翻身注: 例如selenium,phantomjs等)

有了全功能的内嵌浏览器,相当于一个真正的人类在请求网页了,把JavaScript下载下来,不是要在浏览器中做渲染吗?等的就是你! 管你什么AJAX, token ,加密, 这里统统可以执行。

这个无头浏览器渲染完以后,我就可以拿到HTML做后续的分析了。

一切尽在掌握,这种感觉实在美妙。

不过缺点也是有的: 慢! 没办法,有得必有失嘛, 我们还可以采用分布式运行的利器,多跑一些爬虫的实例,人多力量大。

总结

我们爬虫界的终极目标就是和人类的行为保持一致,这样就网站就无法识别了,只不过路漫漫其修远兮,双方的争斗估计会一直持续下去。

在斗争中,建议大家遵循一个原则:“斗而不破”, 不能砸网站的饭碗,要不然人家一怒之下把功能下线了,那大家彻底玩完。

(完)

640?wx_fmt=png

接下来是广告时间:

通读Spring源码? 容易从入门到放弃!

写一个玩具型IoC和AOP框架? 没什么意思!

不如从零开始,一步步逼近Spring!

码农翻身推出的《从零开始造Spring》课程火热招募中,6月10号正式开车!详情猛戳:从零开始造Spring

一个简单的Web客户端(网络爬虫) 本节演示网络爬虫。它是按照一定的规则,自动地抓取万维网信息的程序或者脚本。         在本节的演示程序中,抓取Web的开始页面地址,下载与开始页面相同域名的后续链接页面。 实现代码: [python] view plain copy #-*-coding: utf-8-*-      from sys import argv   阅读详情

相关推荐

Python 爬虫数据处理:爬取数据格式批量转换工具实现

在规模化爬虫项目落地过程中,受目标站点接口返回规则、页面源码结构、第三方数据源差异等因素影响,爬取所得原始数据往往呈现格式杂乱、类型不统一、结构异构等典型问题。单次爬虫任务通常会同时产出 HTML、XML、JSON、CSV、TXT、Excel、嵌套字典文本、URL 参数串等多种异构数据格式,若直接投入数据分析、入库存储、业务调用环节,会大幅增加数据解析成本、降低程序运行稳定性,同时引发字段错乱、编码异常、读取失败等一系列生产问题。

2503_91057718的博客 297

【干货】万字长文教你对抗邪恶的爬虫

或许是竞争对手在窥探商业机密。或许是某个学生为了论文而做的数据采集。又或许只是码农的一个恶作剧。无论如何,一个行为不受控制的爬虫都会对我们的数据安全有着或多或少的威胁,它迫使着我们行动起...

afterlake的博客 881

不用加速器!Google Earth Pro登录失败自救手册:从服务器连接到地图加载的完整排错流程

本文详细解析了Google Earth Pro登录失败的常见问题及解决方案,包括服务器连接失败、地图加载异常等。通过基础排查、内置修复工具使用和高级配置调整,帮助用户无需加速器即可解决启动问题、黑屏和转圈圈等困扰,提升软件使用体验。

weixin_29227425的博客 485

爬虫篇(7)一键转换爬虫请求头headers、Cookies (Fillder/各大浏览器适用)

参考:https://blog.youkuaiyun.com/qq_39802740/article/details/89884756 前言:前些天看到一篇关于一键转换爬虫请求头headers的博客,不过感觉代码冗余度有些高,经过优化并添加了一些东西的东西后写了这篇博客 代码: #!/usr/bin/python # -*- coding: UTF-8 -*- def get_header(hea...

tzyyy1的博客 879

信贷风控分析—征信数据源

详解企业和个人征信报告,以及信贷风控之指标构造案例参考

csdnbt的博客 3636

ZYNQ新手必看:5分钟搞定SD卡与QSPI Flash双启动模式配置(附常见问题排查)

本文为ZYNQ开发者提供了SD卡与QSPI Flash双启动模式的完整配置指南与深度排错方法。详细解析了从BootROM、FSBL到BOOT.bin的启动链条,并分步讲解了在Vivado/Vitis中的硬件配置、软件工程创建及BOOT.bin文件生成流程。针对SD卡格式化、文件放置以及QSPI Flash烧录中的常见陷阱(如版本差异、时钟配置)给出了具体解决方案和排查清单,帮助开发者快速实现可靠的产品启动与程序固化。

ll5678的博客 932

Python爬虫基础

一、什么是urllib库 urllib库是Python内置的HTTP请求库,它可以看做是处理URL的组件集合。

Keep Doing this的博客 761

Unity 编辑器篇|(四)编辑器拓展GUI类 (全面总结 | 建议收藏)

GUI 类是 Unity GUI 的接口,并且具有手动定位功能。“即时模式”GUI 系统(也称为 IMGUI)是一个完全独立的功能系统,不同于 Unity 基于游戏对象的主 UI 系统。IMGUI 是一个代码驱动的 GUI 系统,主要用作程序员的工具。为了驱动该系统,需在实现脚本上调用 OnGUI 函数即时模式 GUI 系统常用于:创建游戏内调试显示和工具。为脚本组件创建自定义检视面板。创建新的编辑器窗口和工具以扩展 Unity 本身。

游戏开发小Y的博客 12万+

python爬虫教程书-Python 爬虫:把廖雪峰教程转换成 PDF 电子书

声明:本文仅供学习参考,切忌用于其它用途,爬的过程中注意控制请求速度,以免给服务器带来过多的压力写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天尝试写一个爬虫,将廖雪峰老师的 Python 教程爬下来做成 PDF 电子书方便离线阅读。开始写爬虫前,我们先来分析一下网站的页面结构,...

weixin_37988176的博客 382

Python爬虫实战:基于最新技术爬取国家企业信用信息公示系统数据

本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的国家企业信用信息公示系统爬虫。我们将从爬虫基础知识讲起,逐步深入到反爬机制应对、数据解析与存储等高级话题,最终实现一个完整的爬虫系统。文章包含大量实战代码示例,适合中高级Python开发者学习参考。网络爬虫(Web Crawler)是一种自动获取网页内容的程序,广泛应用于搜索引擎、数据分析和商业情报收集等领域。通用爬虫:如搜索引擎爬虫,广泛抓取互联网公开信息聚焦爬虫:针对特定领域或网站的数据采集增量式爬虫:只抓取更新内容,减少资源消耗。

2201_76125261的博客 2408

【学习系列】SAP RAP 17:RAP应用部署集成至Fiori Launchpad 【S4HC Public Edition】

本文详细介绍了在SAP S/4HANA Cloud环境中部署RAP应用集成到Fiori Launchpad的两种方法:使用BAS(SAP Business Application Studio)和VSCode。主要步骤包括:1)在BTP中配置Destination连接ES环境;2)设置信任关系;3)创建BAS开发空间;4)通过Fiori应用生成器部署RAP应用;5)创建IAM App、Business Catalog和Business Role;6)配置Launchpad Space和Pages。文章还提供

DeveloperMrMeng的博客 963

用python写一个简单的爬虫_用Python写一个最简单的网络爬虫

标签:什么是网络爬虫?这是百度百科的解释:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。爬虫可以做什么?爬虫可以帮助我们在茫茫互联网中爬取我们需要的特定数据,这个特定数据可以是任何想获得的数据。爬虫是一个让人热血的话题,因为当你在写爬虫的时候...

weixin_39718460的博客 256

matlab 受约束的 Delaunay 三角剖分【2025最新版】

matlab内置调用函数实现受约束的 Delaunay 三角剖分并将结果保存为STL文件

点云侠的博客 1875

网络爬虫简单介绍及第一个爬虫

这篇文章讲述的是web爬虫技术的简介和实现一个简单的爬虫,如有错误或不当之处 还望各位大神批评指正。 什么是网络爬虫? 爬虫是一种自动抓取网页并提取网页内容的程序。 网络爬虫能干什么? 用来做数据采集,是数据分析和挖掘的基础。 网络爬虫需要掌握的技术 了解WWW技术和web应用 掌握获取web内容的程序化语言,如python、Java、c++、python(推荐使用python) 为什么推荐使...

叶清逸的博客 469

移植Google Gemini Nano到RK3588 NPU,实现高效边缘推理

在嵌入式 AI 开发中,大家常常会遇到模型在硬件平台上运行时出现性能瓶颈的问题,比如推理速度慢、功耗过高,这严重影响了应用的实时性和稳定性 ,导致性能瓶颈,无法满足如智能安防、工业检测等场景的实时性需求。为了解决这些问题,我们可以将轻量模型移植到具有强大算力的硬件平台上。本文将手把手教你将 Google Gemini Nano(或类似轻量模型)移植到 RK3588 NPU,充分发挥 RK3588 NPU 的 6Tops 算力,实现高效的模型推理,提升嵌入式系统的 AI 处理能力。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 295

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

用java实现一个简单的网络爬虫

模仿别人的爬虫写的一个简单的网络爬虫,爬出百度(www.baidu.com)这个页面的是所有的url链接,感觉How surprising it is!在最后附上了爬出的url链接import java.io.BufferedReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamR...

知行合一 止于行善 9500

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

《Python网络爬虫从入门到实践(第2版)》学习之二:编写第一个网络爬虫

读完本章就可以体会到通过完成一个简单的Python网络爬虫而带来的乐趣。本章主要介绍如何安装Python和编辑器Jupyter、Python的一些基础语法以及编写一个最简单的Python网络爬虫。

jyl_sh的专栏 1621

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

爬虫学习之一个简单的网络爬虫

概述 这是一个网络爬虫学习的技术分享,主要通过一些实际的案例对爬虫的原理进行分析,达到对爬虫有个基本的认识,并且能够根据自己的需要爬到想要的数据。有了数据后可以做数据分析或者通过其他方式重新结构化展示。 什么是网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万...

weixin_33681778的博客 270

一个最简单的网络爬虫的实现

网络爬虫 听起来有点复杂,但在我理解最,基本的原理就是给你一个起始网站

nhwcrival的专栏 650

Python 网络爬虫 005 (编程) 如何编写一个可以 下载(或叫:爬取)一个网页 的网络爬虫

如何编写一个可以 下载(或叫:爬取)一个网页 的网络爬虫使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:PyCharm 2016 04 我使用的 urllib 的版本:urllib2注意: 我没这里使用的是 Python2 ,而不是Python3一 . 简介编写网络爬虫的第一步就是下载网页,这个过程叫做

AoboSir.com 2万+

来,让我们写一个网络爬虫,下载页面上所有的照片吧!

什么是网络爬虫? 网络爬虫是一种非常有意思的程序。偌大的Internet,就像是一只蜘蛛织成的大网:一个个超级链接就是蛛丝,将无数页面连接起来,而网络爬虫,则会沿着一根根蛛丝,爬遍每一个节点…… 网络爬虫能干嘛? 蜘蛛在网上爬来爬去,当然不是为了健身。它会在网上寻觅猎物,捕捉它们,并拖回自己的窝里。 举一个例子:某天某日的清晨,老板突然让你将雪球网上所有的A股行情信息全部保存到

by21010的专栏 5831

如何自己写一个网络爬虫

这里是维基百科对网络爬虫的词条页面。网络爬虫以叫网络蜘蛛,网络机器人,这是一个程序,其会自动的通过网络抓取互联网上的网页,这种技术一般可能用来检查你的站点上所有的链接是否是都是有效的。当然,更为高级的技术是把网页中的相关数据保存下来,可以成为搜索引擎。 从技相来说,实现抓取网页可能并不是一件很困难的事情,困难的事情是对网页的分析和整理,那是一件需要有轻量智能,需要大量数学计算的程序才能做的事

王奎的博客 1688

用c语言写一个网络爬虫

写一个网络爬虫写一个网络爬虫,来获取一个网站上感兴趣的信息。最基本的模型 就是图。每个页面看作一个节点,若页面A有到达页面B的链接,则添加一条由A到B的单向边。爬虫要遍历这张图。 遍历这张图 广度优先搜索即可。 不推荐用深度优先搜索(容易陷入单个分支而难以搜索到更广泛全面的信息) (如果不明白,请自行查询图论相关资料) (以上noip普及组难度)但是细节(重点) 1 这不是OI题目,不会把节点以编

HfCloud的博客 2万+

使用WebMagic编写一个网络爬虫

使用WebMagic编写一个网络爬虫 引入依赖 <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-core</artifactId> <version>0.7.4</version> </dependency> <dependency> &l

weixin_43932582的博客 206

3.网络爬虫的组成结构(一个爬虫框架)

一个网络爬虫的组成结构: 爬虫调度程序(程序的入口,用于启动整个程序) url管理器(用于管理未爬取得url及已经爬取过的url) 网页下载器(用于下载网页内容用于分析) 网页解析器(用于解析下载的网页,获取新的url和所需内容) 网页输出器(用于把获取到的内容以文件的形式输出) 编写网络爬虫 (1)准备所需库 我们需要准备一款名为BeautifulSoup(网页解析)的开源库,用于对下载的网页进行解析,我们是用的是PyCharm编译环境所以可以直接下载该开源库。 步骤如下: 选择File->.

YANG_xiao_QI的博客 2326
上一篇: 集线器、交换机、路由器有什么区别?
下一篇: 除去大公司的光环,你还剩点啥?
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值