欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python爬虫|网络爬虫简介

程序员文章站 2022-05-08 18:29:20
...

Python爬虫|网络爬虫简介

网络爬虫何时有用

理想状态下, 网 络爬虫并不是必须品, 每个网站 都应该提供API, 以结构化的格式共享它们的数据。 然而现实情况中, 虽然一些网站 已经提供了这种API,但是它们通常会限制可以抓 取的数据,以及访问这些数据的频率。

网络爬虫是否合法

  • 网 络爬虫目前还处于早期的蛮荒阶段,“允许哪些行为” 这种基本秩序还处于建设之中。 从目前的实践来看, 如果抓取数据的行为用于个人使用, 则不存ft问题: 而如果数据用于转载, 那么抓取的数据类型就非常关键了。
  • 当抓取的数据是现实生活中的真实数据(比如,营业地址、 电话清单) 时, 是允许转载的。 但是, 如果是原创数据(比如, 意见和评论), 通常就会受到版权限制, 而不能转载。
  • 无论如何, 当你抓取某个网站 的数据时,请记住自己是该网站 的访客,应当约束自己的抓取行为, 否则他们可能会封禁你的 IP , 甚至采取更进一步的法律行动。

背景调研

检查robots.txt

  • 大多数网站 都会定义robots.txt 文件, 这样可以让爬虫了解爬取该网站时存ft哪些限制。 这些限制虽然仅仅作为建议给出, 但是良好的网 络公民都应当遵守 这些限制。检查robots. txt 文件这一宝贵资源可以最小化爬虫被封禁的可能,而且还能发现 和网站 结构相 关的线索。
  • sect ion 2 规定, 无论使用哪种用户代理, 都应该ft两次下载请求之间给出5秒 的抓 取延迟, 我们需要遵从该建议以避免服务器过载。 这里还有一个/trap 链接,用于封禁那些爬取了不允许链接的恶意爬虫。如果你访问了这个链接, 服务器就会封禁你的IP 一分钟!
  • sect ion 3 定义了一个Sitemap 文件,

检查网站地图

网站提供的Sitemap 文件(即网站 地图) 可以帮助爬虫定位网站 最新的内容, 而无须爬取每 一个网页。 网站 地图提供了所有网页的链接,虽然Sitema p文件提供了一种爬取网站 的有效方式, 但是我们仍需对其谨慎处理, 因为该文件经常存ft缺失、 过期或不完整的问题。

估算网站大小

目标网站 的大小会影响我们如何进行爬取,估算网站 大小的一个简便方法是检查Goo g le爬虫的结果,因为Goo gle很可能已经爬取过我们感兴趣的网站 。 我们可以通过Goo gle 搜索的site 关键词过滤域名结果, 从而获取该信息。

识别网站所用技术

构建网站 所使用的技术类型也会对我们如何爬取产生影响。 有一个十 分有 用的工具可以检查网站 构建的技术类型一-builtwith 模块。 该模块的安装 方法如下。

pip install builtwith

寻找网站所有者

对于一些网站 , 我们可能会关心其所有者是谁。 比如, 我们已知网站 的所有者会封禁网 络爬虫, 那么我们最好把下载速度控制得更加保守一些。 为了找到网站 的所有者,我们可以使用WHOIS协议查询域名的注册者是谁。

编写第一个网络爬虫

为了抓取网站 ,我们首先需要下载包含有感兴趣数据的网页, 该过程一般被称为爬取(crawling) 。

3 种爬取网站的常见方法::

  • 爬取网站 地图
  • 遍历每个网页的数据库ID
  • 跟踪网页链接。

下载网页

要想爬取网页,我们首先需要将其下载下来。下面的示例脚本使用Python 的urllib 2 模块下载URL。

import urllib2 

de f downl oad ( url ) : return urllib2 . url。pen ( ur l ) . read () 

当传入URL参数时, 该函数将会下载网页并返回其HTML。 不过, 这个代码片段存在一个问题, 即当下载网页时, 我们可能会遇到一些无法控制的错误, 比如请求的页面可能不存在。

  1. 重试下载

    下载时遇到的错误经常是临时性的, 比如服务器 过载时返回的 503 Ser vice Unavailable错误。

  2. 设置用户代理

如果能使用可辨识的用户代理则 更好, 这样可以避免我们的网 络爬虫碰到一些问题。 此外, 也许是因为曾经 历过质量不佳的Python网 络爬虫造成的服务器过载, 一些网站 还会封 禁这个 默认的用户代理 。

网站地图爬虫

在第一个简单的爬虫中, 我们将使用示例网站 robots. tx t文件中发现 的网站 地图来下载所有网页。 为了解析网站 地图, 我们将会使用一个简单的 正则表达式, 从< loc >标签中提取出URL。

ID遍历爬虫

在爬取网站 时,遍历ID 是一个很便捷的方法,但是和网站 地图爬虫一样, 这种方法也无法保证始终可用。 比如, 一些网站 会检查页面别名是否满足预 期, 如果不是, 则会返回404 Not Found 错误。

链接爬虫

通过跟踪所有链接的方式,我们可以很容易地 下载整个网站 的页面。但是, 这种方法会下载大量我们并不需要的网页。 例如, 我们想要从一个在线论坛 中抓取用户账号详情页,那么此时我们只需要下载账号页, 而 不需要下载讨 论贴的页面。

相关标签: Python爬虫 python