python网络爬虫:爬虫环境与爬虫简介

article/2025/11/8 4:58:02

python网络爬虫

python爬虫环境与爬虫简介

认识爬虫

  1. 浏览网页基本流程

在这里插入图片描述
网络爬虫模拟了浏览器去发送请求并且返回响应结果的一个过程。

  1. 爬虫概念
    网络爬虫也被称为网络蜘蛛、网络机器人,是一个自动下载网页的计算机程序或自动化脚本。
    网络爬虫就像一只蜘蛛一样在互联网上沿着URL的丝线爬行,下载每一个URL所指向的网页,分析页面内容。

  2. 爬虫的原理
    (1)通用网络爬虫
    通用网络爬虫又称为全网爬虫,其爬行对象由一批种子URL扩充至整个Web,该类爬虫比较适合为搜索引擎搜索广泛的主题,主要由搜索引擎或大型Web服务提供商使用。

    深度优先策略:按照深度由低到高的顺序,依次访问下一级网页链接,直到无法再深入为止。

    广度优先策略:按照网页内容目录层次的深浅来爬行,优先爬取较浅层次的页面。当同一层中的页面全部爬行完毕后,爬虫再深入下一层。

    全网爬虫一般成本较高,范围较大。
    (2)聚焦网络爬虫
    聚焦网络爬虫又被称作主题网络爬虫,其最大的特点是只选择性地爬行与预设的主题相关的页面。

    基于内容评价的爬行策略:该种策略将用户输入的查询词作为主题,包含查询词的页面被视为与主题相关的页面。

    基于链接结构评价的爬行策略:该种策略将包含很多结构信息的半结构化文档Web页面用来评价链接的重要性,其中一种广泛使用的算法为PageRank算法

    基于增强学习的爬行策略:该种策略将增强学习引入聚焦爬虫,利用贝叶斯分类器对超链接进行分类,计算出每个链接的重要性,按照重要性决定链接的访问顺序。

    基于语境图的爬行策略:该种策略通过建立语境图学习网页之间的相关度,计算当前页面到相关页面的距离,距离越近的页面中的链接优先访问。

    (3)增量式网络爬虫
    增量式网络爬虫只对已下载网页采取增量式更新或只爬行新产生的及已经发生变化的网页,需要通过重新访问网页对本地页面进行更新,从而保持本地集中存储的页面为最新页面。
    常用的更新方法如下。

    统一更新法:以相同的频率访问所有网页,不受网页本身的改变频率的影响。

    个体更新法:根据个体网页的改变频率来决定重新访问各页面的频率。

    基于分类的更新法:爬虫按照网页变化频率分为更新较快和更新较慢的网页类别,分别设定不同的频率来访问这两类网页。

    具体应用哪一种更新方法还要视个人要求而定。

  3. 爬虫的合法性

    目前,多数网站允许将爬虫爬取的数据用于个人使用或者科学研究。但如果将爬取的数据用于其他用途,尤其是转载或者商业用途,严重的将会触犯法律或者引起民事纠纷。
    以下两种数据是不能爬取的,更不能用于商业用途。

    个人隐私数据:如姓名、手机号码、年龄、血型、婚姻情况等,爬取此类数据将会触犯个人信息保护法。

    明确禁止他人访问的数据:例如用户设置了账号密码等权限控制,进行了加密的内容。

    还需注意版权相关问题,有作者署名的受版权保护的内容不允许爬取后随意转载或用于商业用途。所以爬虫要慎重使用。

  4. robots协议

    robots协议也称作爬虫协议、机器人协议,它的全名叫作网络爬虫排除标准(Robots Exclusion Protocol ),当使用一个爬虫爬取一个网站的数据时,需要遵守网站所有者针对所有爬虫所制定的协议。
    它通常是一个叫作robots.txt的文本文件,该协议通常存放在网站根目录下,里面规定了此网站哪些内容可以被爬虫获取,及哪些网页是不允许爬虫获取的。
    (1)robots.txt的样例
    User-agent: *
    Disallow : / (你不能爬取的目录)
    Allow: /public/ (可以爬取)

    这实现了对所有搜索爬虫只允许爬取public目录的功能,将上述内容保存成robots.txt文件,放在网站的根目录下,和网站的入口文件(比如index.php、index.html和index.jsp等)放在一起。

    上面的User-agent描述了搜索爬虫的名称,这里将其设置为*则代表该协议对任何爬取爬虫有效。比如,我们可以设置:User-agent: Baiduspider。这就代表我们设置的规则对百度爬虫是有效的。如果有多条User-agent记录,则就会有多个爬虫会受到爬取限制,但至少需要指定一条。Disallow 指定了不允许抓取的目录,比如上例子中设置为/则代表不允许抓取所有页面。Allow一般和Disallow一起使用,一般不会单独使用,用来排除某些限制。现在我们设震为/public/,则表示所有页面不允许抓取,但可以抓取public目录。

禁止所有爬虫访问任何目录的代码

User-agent:*
Disallow:/

允许所有爬虫访问任何目录的代码

User-agent:*
Allow: /public/

禁止所有爬虫访问网站某些目录的代码如下

User-agent: * 
Disallow: /private/ 
Disallow: /tmp/

只允许某一个爬虫访问的代码如下

User-agent: WebCrawler
Disallow: 
User-agent: * 
Disallow: /

(2)robotparser 模块

了解 Robots 协议之后,我们就可以使用robotparser模块来解析robots.txt了。 该模块提供了一个类RobotFileParser,它可以根据某网站的robots.txt文件来判断一个爬取爬虫是否有权限来爬取这个网页。

该类用起来非常简单,只需要在构造方法里传入robots.txt的链接即可。 首先看一下它的声明:urllib.robotparser.RobotFileParser(url=’’),当然也可以在声明时不传入,默认为空,最后再使用 set_url()方法设置一下也可。

下面列刷了这个类常用的几个方法

set_url():用来设置robots.txt文件的链接。 如果在创建RobotFileParser对象时传入了链接,那么就不需要再使用这个方法设置了。

read():读取robots.txt文件并进行分析。 注意,这个方法执行一个读取和分析操作,如果不调用这个方法, 接下来的判断都会为False,所以一定记得调用这个方法。 这个方法不会返 回任何内容,但是执行了读取操作。

parse():用来解析robots.txt文件,传人的参数是robots.txt某些行的内容,它会按照robots.txt的语法规则来分析这些内容。

can_fetch():该方法传入两个参数, 第一个是User-agent,第二个是要抓取的URL。 返回的内容是该搜索引擎是否可以抓取这个URL,返回结果是True或False。

mtime():返回的是上次抓取和分析robots.txt的时间,这对于长时间分析和抓取的搜索爬虫是很有必要的,你可能需要定期检查来抓取最新的robots.txt。

modified() :它同样对长时间分析和抓取的搜索爬虫很有帮助,将当前时间设置为上次抓取 和分析robots.txt的时间。

认识反爬虫

  1. 网站反爬虫的目的和手段
    (1)通过User-Agent校验反爬
    浏览器在发送请求的时候,会附带一部分浏览器及当前系统环境的参数给服务器,服务器会通过User-Agent的值来区分不同的浏览器。
    在这里插入图片描述
    (2)通过访问频度反爬

    普通用户通过浏览器访问网站的速度相对爬虫而言要慢的多,所以不少网站会利用这一点对访问频度设定一个阈值,如果一个IP单位时间内访问频度超过了预设的阈值,将会对该IP做出访问限制。

    通常需要经过验证码验证后才能继续正常访问,严重的甚至会禁止该IP访问网站一段时间。

    (3)通过验证码校验反爬
    有部分网站不论访问频度如何,一定要来访者输入验证码才能继续操作。例如12306网站,不管是登陆还是购票,全部需要验证验证码,与访问频度无关。
    (4)通过改变网页结构反爬
    一些社交网站常常会更换网页结构,而爬虫大部分情况下都需要通过网页结构来解析需要的数据,所以这种做法也能起到反爬虫的作用。在网页结构变换后,爬虫往往无法在原本的网页位置找到原本需要的内容。
    在这里插入图片描述
    (5)通过账号权限反爬
    部分网站需要登录才能继续操作,这部分网站虽然并不是为了反爬虫才要求登录操作,但确实起到了反爬虫的作用。
    例如微博查看评论就需要登录账号。

  2. 爬取策略制定

发送模拟User-Agent:通过发送模拟User-Agent来通过检验,将要发送至网站服务器的请求的User-Agent值伪装成一般用户登录网站时使用的User-Agent值。

调整访问频度:通过备用IP测试网站的访问频率阈值,然后设置访问频率比阈值略低。这种方法既能保证爬取的稳定性,又能使效率又不至于过于低下。

通过验证码校验:使用IP代理,更换爬虫IP;通过算法识别验证码;使用cookie绕过验证码。

应对网站结构变化:只爬取一次时,在其网站结构调整之前,将需要的数据全部爬取下来;使用脚本对网站结构进行监测,结构变化时,发出告警并及时停止爬虫。

通过账号权限限制:通过模拟登录的方法进行规避,往往也需要通过验证码检验。

通过代理IP规避:通过代理进行IP更换可有效规避网站检测,需注意公用IP代理池是网站重点监测对象。

配置python爬虫环境

  1. python爬虫相关库介绍与配置
    目前Python爬虫相关库,按照库的功能,整理如下。
类型库名简介
通用urllibPython内置的HTTP请求库,提供一系列用于操作URL的功能
通用requests基于urllib,采用Apache2 Licensed开源协议的HTTP库
通用urllib 3提供很多Python标准库里所没有的重要特性:线程安全,连接池,客户端SSL/TLS验证,文件分部编码上传,协助处理重复请求和HTTP重定位,支持压缩编码,支持HTTP和SOCKS代理,100%测试覆盖率
框架scrapy一个为了爬取网站数据,提取结构性数据而编写的
HTML/XML解析器lxmlc语言编写高效HTML/XML处理库。支持XPath
HTML/XML解析器BeautifulSoup 4纯Python实现的HTML/XML处理库,效率相对较高

http://chatgpt.dhexx.cn/article/hPN8Gel0.shtml

相关文章

python爬虫基础知识

今天学习了爬虫原理,网络通信基于URL统一资源定位器,这就是最简单最原始的爬虫。 欢迎加微信18599911861有更多python爬虫教程视频资源分享。 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常…

php编程语言和c语言区别,3月编程语言排行榜出炉,C语言暴走,PHP表现优秀!

近日,3月编程语言排行榜出炉了。 Python排名第四,GO语言仅排名第17位。 在此榜单中,作为编程语言常青树的C语言表现最为优秀,简直是暴走的节奏。 对于此次3月编程语言排行榜,程序员网友们纷纷发表了各自的一些看法&…

用C语言爬网页代码

今天下午把爬代码看了一下&#xff0c;也敲了&#xff0c;只不过我爬下来的总是乱码&#xff0c;现在大多数爬虫都是Python和Java&#xff0c;很少有人用C语言爬了&#xff1b; #include <stdio.h> #include <winsock2.h> #include<string.h> #pragma commen…

C语言的主要用途以及未来发展

截止到 2022 年&#xff0c;C语言已经发布了50 年&#xff0c;是不折不扣的“大叔”或者“大爷”&#xff0c;但是&#xff0c;C语言在编程界依然非常流行&#xff1b;2019 年&#xff0c;C语言由于速度快、平台独立的特性&#xff0c;在世界编程语言排行榜中夺得第二名。 C语言…

python爬虫笔记

requests 请求库 import requests import recontent requests.get(https://book.douban.com/).text pattern re.compile(<li.*?cover.*?href"(.*?)".*?title"(.*?)".*?more-meta.*?author">(.*?)</span>.*?year">(…

爬虫学习笔记

目录 一、 初识爬虫 1. 简单的爬虫 2. web请求 3. http协议 4. requests入门 二、数据解析与提取 1. 概述 2. Regular Expression 正则表达式 3. re模块 4. 豆瓣电影练习 5. 电影天堂练习 6. bs4 北京新发地、热搜榜 7. 抓取图库图片 8. Xpath语法 9. xpath猪八…

Python爬虫自学

Python爬虫自学 前言 这是我自己学习Python爬虫的学习笔记&#xff0c;内容大部分来自上海交通大学出版的《Python语言程序设计实践教程》&#xff0c;欢迎大家一起交流 参考博客&#xff1a; Python爬虫教程&#xff08;纯自学经历&#xff0c;保姆级教程&#xff09; Be…

爬虫基础day01

爬虫基础day01 一、介绍 什么是网络爬虫&#xff1f;&#xff08;面试题&#xff09; 网络爬虫&#xff08;Web Spider 又称为网页蜘蛛、网络机器人&#xff09;就是模拟浏览器发送网络请求&#xff0c;就收请求响应&#xff0c;一种按照一定的规则&#xff0c;自动的抓取互联…

网络爬虫详解

网络爬虫&#xff08;web crawler&#xff0c;又称为网页蜘蛛&#xff08;只针对网页&#xff0c;B/S系统&#xff09;&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓…

Linux C语言实现简单爬虫

文章目录 代码案例源代码 应用知识hostent结构体gethostbyname()函数inet_pton和inet_ntopinet_ptoninet_ntop sockaddr_inin_addr结构htons 编辑socket()connect()sprintf函数format标签属性 setsockopt 代码案例 爬到的HTML文件 输入终端的参数 源代码 /***************…

fcntl函数 和 ioctl函数

文章目录 一、fcntl 函数二、ioctl 函数 一、fcntl 函数 fcntl()函数可以对一个已经打开的文件描述符执行一系列控制操作&#xff0c;譬如复制一个文件描述符&#xff08;与dup、dup2 作用相同&#xff09;、获取/设置文件描述符标志、获取/设置文件状态标志等&#xff0c;类似…

linux ioctl 理解

背景 传统的操作系统可以分成两层&#xff0c;用户层和内核层。内核代码处理敏感资源同时在不同应用程序中间提供了安全且可信的隔离&#xff0c;出于此&#xff0c;操作系统要阻止用户态的程序直接访问内核资源。用户空间的程序通常发出一个给内核的请求&#xff0c;该请求称为…

linux ioctl函数介绍

1. 概念 ioctl 是设备驱动程序中设备控制接口函数&#xff0c;一个字符设备驱动通常会实现设备打开、关闭、读、写等功能&#xff0c;在一些需要细分的情境下&#xff0c;如果需要扩展新的功能&#xff0c;通常以增设 ioctl() 命令的方式实现。 在文件 I/O 中&#xff0c;ioctl…

ioctl函数详解(参数详解,驱动unlocked_ioctl使用、命令码如何封装)

ioctl函数详解 一、ioctl函数的原型 在用户空间的函数原型 #include <sys/ioctl.h> int ioctl(int d, int request, ...); //io的控制&#xff0c;设备的控制/***第一个参数d是打开的文件描述符***//***The second argument is a device-dependent request code&…

IOCTL函数用法

.ioctl 的实现 一、ioctl的简介&#xff1a; 虽然在文件操作结构体"struct file_operations"中有很多对应的设备操作函数&#xff0c;但是有些命令是实在找不到对应的操作函数。如CD-ROM的驱动&#xff0c;想要一个弹出光驱的操作&#xff0c;这种操作并不是所有的…

IOCTL函数用法详解

ioctl是设备驱动程序中对设备的I/O通道进行管理的函数 。所谓对I/O通道进行管理&#xff0c;就是对设备的一些特性进行控制&#xff0c;例如串口的传输波特率、马达的转速等等。它的调用个数如下&#xff1a; int ioctl(int fd, ind cmd, …)&#xff1b; 其中fd是用户程序打…

linux ioctl()详解

一、ioctl的简介&#xff1a; 虽然在文件操作结构体"struct file_operations"中有很多对应的设备操作函数&#xff0c;但是有些命令是实在找不到对应的操作函数。如CD-ROM的驱动&#xff0c;想要一个弹出光驱的操作&#xff0c;这种操作并不是所有的字符设备都需要的…

ioctl 详细介绍

ioctl 详细介绍 (一)ioctl 的作用: 通过设备驱动程序执行各种类型的硬件控制。除了简单数据传输外,大部分设备可以执行其他的一些操作,比如,用户空间经常请求设备锁门、弹出介质、报告错误信息、改变波特率或者执行自破坏等等。 Ioctl的操作通过流程图简言之: 从图…

ioctl函数

一、什么是ioctl   ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理&#xff0c;就是对设备的一些特性进行控制&#xff0c;例如串口的传输波特率、马达的转速等等。   ioctl函数是文件结构中的一个属性分量&#xff0c;就是说如果你的驱动程序…

linux驱动开发(四):ioctl()函数

前文中我们介绍了应用程序通过使用虚拟文件系统VFS提供的接口&#xff0c;来控制字符驱动程序&#xff0c;完成字符驱动设备的open、close、read、write操作。但是如果我们想进行除此以外的其他操作&#xff0c;拓展一些file_operations给出的接口中没有的自定义功能&#xff0…