蒙娜丽宁
这个作者很懒,什么都没留下…
展开
-
Python爬虫编程思想(1):HTTP基础
由于网络爬虫要处理的主要目标是网页,所以在编写爬虫之前,非常有必要了解一些爬虫的基础知识,例如HTTP、HTML、CSS、Session、Cookie等。在本专栏开始的几篇文章中会先讲解这些基础知识。1. URI和URL通过浏览器访问网页,首先就要接触到URL(Uniform Resource Location,统一资源定位符),不过在很多场景,经常会遇到URI,那么URI是什么呢?Uri的英文全称是Uniform Resource Identifier,中文的意思是...原创 2021-07-08 12:24:18 · 1431 阅读 · 6 评论 -
Python爬虫编程思想(2):客户端请求与服务端响应
目录1. 客户端请求(1)请求方法(2) 请求链接(3)请求头(4)请求体2. 响应(1)响应状态码(2) 响应头(3) 响应体 网络爬虫的基本操作就是不断请求服务端,并接收服务端的响应。所以首先要了解客户端发送请求的方式,以及服务端响应请求的方式。本文将讲解这些内容。1. 客户端请求请求是由客户端向服务端发出的,可分为如下4部分。请求方法(Request Method) 请求链接(Request URL) 请求头(...原创 2021-07-08 17:28:31 · 525 阅读 · 0 评论 -
Python爬虫编程思想(3):网页基础
目录1. HTML2. CSS3. CSS选择器4.JavaScript整个互联网拥有数以亿计的网页,这些网页的样式千差万别,但不管是什么样的网页,都离不开Web三剑客对其做的贡献,它们是HTML、CSS和JavaScript。这三种技术是Web的核心,它们分工不同。HTML决定了Web页面上有什么样的组件(如按钮、表格、复选框等),CSS决定了Web页面上的这些组件如何摆放(布局),以及它们的样式,而JavaScript是一种编程语言,可以运行在浏...原创 2021-07-09 22:18:03 · 309 阅读 · 0 评论 -
Python爬虫编程思想(4):网络爬虫的基本原理
目录1. 爬虫的分类2. 爬虫抓取数据的方式和手段我们为什么将从互联网上下载资源的程序称为爬虫呢?其实这是一个很形象的比喻。整个互联网相当于一张用各种数据资源织成的大网,而从这张网上下载资源的程序相当于蜘蛛,为了获取资源,蜘蛛需要不断在这张数据之网上爬行,所以形象地将这种程序称为爬虫。由于这张数据之网的每个节点都包含了相应的资源(网页、图像或其他类型的文件),而且这些节点都有着千丝万缕的联系,也就是从一个节点可以通过这些联系(蛛丝)到达另外一个节点,因此,从理论上...原创 2021-07-09 22:21:25 · 555 阅读 · 0 评论 -
Python爬虫编程思想(5):Session与Cookie
目录1. 静态页面和动态页面2. 无状态HTTP与Cookie3. 利用Session和Cookie保持状态4. 查看网站的Cookie5. HTTP状态何时会失效(1)与客户端有关(2)与服务端有关在浏览很多网站时我们会遇到这样的情况,第一次访问网站,会要求输入用户名和密码(有的网站也可以通过微信、QQ扫描二维码登录)登录,成功登录后。以后再登录该网站,会直接进入已登录状态,通常在网站的右上角会显示登录用户的昵称或账号。不...原创 2021-07-10 18:49:18 · 278 阅读 · 0 评论 -
Python爬虫编程思想(6):实战案例:抓取所有的网络资源
到现在为止,我们已经对网络爬虫涉及到的基本知识有了一个初步的了解。本文会编写一个简单的爬虫应用,以便让读者对爬虫有一个基本的认识。本节要编写的爬虫属于全网爬虫类别,但我们肯定不会抓取整个互联网的资源。所以本节会使用7个HTML文件来模拟互联网资源,并将这7个HTML文件放在本地的nginx服务器的虚拟目录,以便抓取这7个HTML文件。全网爬虫要至少有一个入口点(一般是门户网站的首页),然后会用爬虫抓取这个入口点指向的页面,接下来会将该页面中所有链接节点(a节点)中href...原创 2021-07-10 18:56:59 · 1545 阅读 · 4 评论 -
Python爬虫编程思想(7):实战案例:抓取博客文章列表
在上文给出的爬虫案例属于全网爬虫,从理论上说,如果给定的入口点也没包含足够多URL,并且大多数URL都可以导航到其他网站的页面,这个爬虫是可以将整个互联网的页面都抓取下来的。除了这种爬虫外,还有另外一种爬虫,这就是定向爬虫,这种爬虫并不是用来抓取整个互联网的页面的,而是用与抓取特定网站的资源。例如,抓取某个网站的博客列表数据。定向爬虫的基本实现原理与全网爬虫类似,都需要分析HTML代码,只是定向爬虫可能并不会对每一个获取的URL对应的页面进行分析,即使分析,可能也不会继续...原创 2021-07-10 19:01:24 · 467 阅读 · 2 评论 -
Python爬虫编程思想(8):使用urllib库发送HTTP请求和接收响应
目录1. urllib简介2. 用urlopen函数发送HTTP GET请求3. 用urlopen函数发送HTTP POST请求 编写爬虫的第一步就是选择一个好用的网络库,通过网络库的API可以发送请求,并接收服务端的响应。Python语言中的网络库有很多,有内置的,有第三方的。首先我们会讲一个Python内置的网络库:urllib。关于urllib,我们会讲如下内容。urllib的主要功能 发送HTTP请求和接收响应 请求超时 设置HTTP请求头 请求验证页面...原创 2021-07-12 22:24:42 · 403 阅读 · 0 评论 -
Python爬虫编程思想(9):用urllib处理请求超时
当向服务端发送HTTP请求时,通常很快就会得到响应,但由于某些原因,服务端可能迟迟没有响应(很大程度上是服务端吞吐量不够,你的请求正在排队),这样HTTP链接就会一直等待,知道超过预设的等待时间,这个等待时间就是请求超时。通常请求超时都比较大,这样以来,如果服务端半天没有响应,那么客户端就会一直在那等待。这对于爬虫来说是非常不妥的。因为爬虫通常会启动一个或多个线程抓取Web资源。如果这时有一个线程由于服务端没有响应而一直在那里等待,那么就相当于浪费了一个人力。所以需要将这个请求超时设置的比较...原创 2021-07-17 08:22:41 · 1199 阅读 · 0 评论 -
Python爬虫编程思想(10):通过urllib设置HTTP请求头
1. 设置英文HTTP请求头如果用爬虫向服务端发送HTTP请求,通常需要模拟浏览器的HTTP请求,也就是让服务端误认为客户端是浏览器,而不是爬虫,这样就会让服务器的某些反爬虫技术失效。但模拟浏览器发送HTTP请求需要设置名为User-Agent的HTTP请求头,除了这个请求头外,还可以会设置其他的请求头,而我们以前使用urlopen函数发送HTTP请求,请求头都使用的默认值。urlopen函数本身并没有设置HTTP请求头的命名参数,要想设置HTTP请求...原创 2021-07-18 22:26:35 · 587 阅读 · 0 评论 -
Python爬虫编程思想(11):用urllib请求基础验证页面
有一些页面并不是我们想访问就能访问的,这些页面都会将各种验证,例如,在第一次访问网页之前,会先弹出如图1所示的登录对话框,只有正确输入用户名和密码才能访问页面,否则会直接跳到错误页面。这种验证被称为基础验证,是HTTP验证的一种。输入的用户名和密码会通过Authorization请求头字段发送给服务端,在访问给页面时,如果服务端检测到HTTP请求头中没有Authorization字段时,会设置名为WWW-Authenticate的HTTP响应头字段,同时返回401响应...原创 2021-07-20 22:14:13 · 1092 阅读 · 5 评论 -
Python爬虫编程思想(12):搭建代理与使用代理
最常见的反爬技术之一就是通过客户端的IP鉴别是否为爬虫。如果同一个IP在短时间内大量访问服务器的不同页面,那么极有可能是爬虫,如果服务端认为客户端是爬虫,很有可能将客户端所使用的IP临时或永久禁用,这样爬虫就再也无法访问服务器的任何资源了,当然,如果使用的是ADSL或光纤宽带,重新拨一下号或重启一下,一般会更换IP。但爬虫的任务是从服务器抓取成千上万的资源,光换几个IP是没用的,这就要求爬虫在抓取服务器资源时,需要不断更换IP,而且是大量的,数以万计的IP。更换IP的方式有很多,最常用,最简...原创 2021-07-30 17:34:42 · 311 阅读 · 0 评论 -
Python爬虫编程思想(13):读取和设置Cookie
一个功能强大的爬虫需要全方位,多维度地模拟浏览器向服务端发送请求,除了我们以前讲到的模拟User-Agent请求字段,通过代理模拟多个IP发送请求,还有一个重要的模拟维度,那就是模拟Cookie。Cookie本质上是服务端向客户端返回响应数据后在客户端留下的印记,而当客户端再次访问服务端时会带上这个印记。例如,用户第一次成功登录后,会在浏览器的Cookie中保存一个ID,当浏览器再次访问该服务端时会带上这个ID,当服务端看到这个ID时,就会认为这个用户已经是登录用户了,就会返回登录后的数据,...原创 2021-07-30 18:00:03 · 604 阅读 · 0 评论 -
Python爬虫编程思想(14):网络爬虫中的异常处理
在前面的文章中详细讲解了发送请求的过程,但这是在正常情况下的使用。如果非正常使用,例如,提供的URL根本就是错的,那么在发送请求时就会抛出异常。如果不使用try...except语句,程序就会崩溃(俗称异常退出)。在使用try...except语句捕捉异常时,except子句通常会加上错误类型,以便我们清楚地了解发生了什么错误。这些异常类都在urllib的error模块中定义,主要有两个异常类:URLError和HTTPError。1. URLErrorURLErro...原创 2021-07-31 08:53:41 · 339 阅读 · 0 评论 -
Python爬虫编程思想(15):解析链接的n种方法
目录1. 拆分与合并URL(urlparse与urlunparse)2 另外一种拆分与合并URL的方式(urlsplit与urlunsplit)3. 连接URL(urljoin)4 URL编码(urlencode)5 编码与解码(quote与unquote)6 参数转换(parse_qs与parse_qsl)urllib库里的parse模块可以用来解析URL,例如,将URL的各个部分抽取出来,或将不同部分合并为一个完整的URL,以及链接转换...原创 2021-08-26 08:39:19 · 380 阅读 · 0 评论 -
Python爬虫编程思想(16):Robots协议(不了解这个就是面向监狱编程了)
目录1. Robots协议简介2. 分析Robots协议本问会介绍什么是Robots协议,以及如何用Robots协议规范爬虫的行为。1. Robots协议简介Robots协议也称作爬虫协议、机器人协议,它的全名是网络爬虫排除标准(Robots Exclusing Protocol),用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取。该协议的内容通常放在一个名为robots.txt的文本文件中,该文件一般位于网站的根目录下。...原创 2021-09-01 11:13:34 · 356 阅读 · 0 评论 -
Python爬虫编程思想(17):使用urllib3发送HTTP Get和HTTP POST请求
目录1 urllib3简介2. urllib3模块3. 发送HTTP GET请求4. 发送HTTP POST请求1 urllib3简介在Python程序中,使用频率最高的网络模块莫过于urllib,由于urllib是Python内置的网络模块,不需要单独安装,使用起来非常方便。但随着互联网的不断发展,urllib里的功能明显已经不够用了,所以有了后来的urllib2和urllib3。从前面文章的内容来看,urllib中的API大多与URL相关,...原创 2021-09-01 12:36:59 · 487 阅读 · 0 评论 -
Python爬虫编程思想(18):使用urllib3处理HTTP请求头和HTTP响应头
目录1. HTTP请求头2. HTTP响应头1. HTTP请求头大多数服务端应用都会检测某些HTTP请求头,例如,为了阻止网络爬虫或其他的目的,通常会检测HTTP请求头的User-Agent字段,该字段指定了用户代理,也就是用什么应用访问的服务端程序,如果是浏览器,如Chrome,会包含Mozilla/5.0或其他类似的内容,如果HTTP请求头不包含这个字段,或该字段的值不符合要求,那么服务端程序就会拒绝访问。还有一些服务端应用要求只有处于...原创 2021-09-02 11:44:38 · 1031 阅读 · 0 评论 -
Python爬虫编程思想(19):使用urllib3上传文件与处理超时
1. 上传文件客户端浏览器向服务端发送HTTP请求时有一类特殊的请求,就是上传文件,为什么特殊呢?因为发送其他值时,可能是以字节为单位的,而上传文件时,可能是以KB或MB为单位的,所以特殊就特殊在发送的文件尺寸通常比较大,所以上传的文件内容会用multipart/form-data格式进行编码,然后再上传。urllib3对文件上传支持的非常好。只需要像设置普通的HTTP请求头一样在request方法中使用fields关键字参数指定一个描述上传文件的HTTP请求头字段,然后再通过元组指定相...原创 2021-09-06 22:21:02 · 706 阅读 · 0 评论 -
Python爬虫编程思想(20):requests网络库的基本用法
目录1. requests的HelloWorld2. GET请求3 添加HTTP请求头1. requests的HelloWorld学习任何一种技术,都会用一个超级简单的案例起步,这个案例统称为HelloWorld。学习requests我们也沿用这个习惯。在开始使用requests之前,需要使用下面的命令安装requests。pip install requestsurllib库中的urlopen方法实际上是以GET方式请求网页,而requests中对应的方法是get,该.原创 2021-09-08 08:12:57 · 183 阅读 · 0 评论 -
Python爬虫编程思想(21):使用requests网络库抓取二进制数据、提交POST请求和处理响应数据
目录1. 抓取二进制数据2. POST请求3. 响应数据1. 抓取二进制数据get方法指定的URL不仅可以是网页,还可以是任何二进制文件,如png图像、pdf文档等,不过对于二进制文件,尽管可以直接使用Response.text属性获取其内容,但显示的都是乱码。一般获取二进制数据,需要将数据保存到本地文件中。所以需要调用Response.content属性获得bytes形式的数据,然后再使用相应的API将其保存在文件中。本例使用get方法抓取一个png格式的图像文件,并将其保存为原创 2021-09-08 08:18:28 · 888 阅读 · 0 评论 -
Python爬虫编程思想(22):使用requests网络库上传文件、处理Cookie和Session
目录 1. 上传文件2. 处理Cookie3. 使用同一个会话(Session) 1. 上传文件用requests上传文件也是相当简单的,只需要指定post方法的files参数即可。files参数的值可以是BufferedReader对象,该对象可以用Python语言的内置函数open返回。下面的例子使用post方法分别向http://httpbin.org/post和upload_server.py上传一个本地图...原创 2021-09-09 22:17:21 · 312 阅读 · 0 评论 -
Python爬虫编程思想(23):使用requests验证ssl证书
目录1. 生成私钥文件2. 生成csr文件3. 生成证书文件(crt文件) 在用requests请求HTTPS URL时,如果证书验证错误,默认会抛出如图1所示的异常。也就是说,requests在默认情况下会对证书进行验证。不过可以使用verify参数将验证功能关掉。verify参数的默认值是True,表示验证证书,如果将verify参数设为False,则会关掉requests的验证功能,但会显示一个警告,可以使用urllib3的disable_warning...原创 2021-09-15 08:56:46 · 1250 阅读 · 0 评论 -
Python爬虫编程思想(24):在requests中使用代理和处理超时
目录1. 使用代理2. 超时1. 使用代理 使用代理的必要性在前文已经详细阐述了,requests使用代理发送请求非常容易,只需要指定proxies参数即可,该参数是一个字典类型的值,每一对key-value表示一个代理的协议,如http、https等。下面的例子设置了HTTP和HTTPS代理,并通过代理访问了天猫首页,最后输出响应内容。import requestsproxies = { 'http':'http://144.123.6...原创 2021-09-15 10:40:19 · 296 阅读 · 0 评论 -
Python爬虫编程思想(25):使用requests实现身份验证和请求打包
目录1. 身份验证2. 将请求打包1. 身份验证使用urllib库进行身份验证时,需要使用一大堆类,如HTTPPasswordMgrWithDefaultRealm、HTTPBasicAuthHandler等,非常麻烦。使用requests进行身份验证就简单得多,只需要设置auth参数即可。auth参数的值是一个HTTPBasicAuth对象,封装了用户名和密码。下面的例子向服务端发送支持Basic验证的请求,如果验证成功,服务端会返回success。impor...原创 2021-09-15 11:00:10 · 535 阅读 · 0 评论 -
Python爬虫编程思想(26):Twisted的异步编程模型
目录1. 同步编程模型2. 线程编程模型3. 异步编程模型学习Twisted框架之前,先要了解一下异步编程模型。可能很多读者会认为,异步编程就是多线程编程,其实这两种编程模型有着本质的区别。目前常用的编程模型有如下3种:同步编程模型 线程编程模型 异步编程模型下面就来看看这3种编程模型有什么区别。1. 同步编程模型如果所有的任务都在一个线程中完成,那么这种编程模型称为同步编程模型。线程中的任务都是顺序执行的,也就是说,只有...原创 2021-09-16 08:13:18 · 305 阅读 · 0 评论 -
Python爬虫编程思想(27):Twisted框架基础
目录1. Reactor(反应堆)模式2. HelloWorld,Twisted框架1. Reactor(反应堆)模式 在学习Twisted框架之前,先来了解一下反应堆模式。异步编程模型之所以能监视所有的任务的完成和阻塞情况,是因为通过循环用非阻塞模式执行完了所有的任务。例如,对于使用Socket访问多个服务器的任务。如果使用同步编程模型,会一个任务一个任务地顺序执行,而使用异步编程模型,执行的所有Socket方法都处于非阻塞的(使用setblocking(0)...原创 2021-09-16 08:22:49 · 430 阅读 · 0 评论 -
Python爬虫编程思想(28):用Twisted框架实现时间戳客户端与服务端
目录1.时间戳客户端 2. 时间戳服务端1.时间戳客户端 Twisted框架的异步机制是整个框架的基础,我们可以在这个基础上实现很多机遇异步编程模型的应用,在这一节我们会利用Twisted框架的相关API实现一个时间戳客户端。连接服务端Socket,需要调用connectTCP函数,并且通过该函数的参数指定host和port,以及一个工厂对象,该工程对象对应的类必须是ClientFactory的子类,并且设置了protocol等...原创 2021-09-16 08:30:00 · 260 阅读 · 0 评论 -
Python爬虫编程思想(29):正则表达式的匹配(match)与搜索(search)
目录1.使用match方法匹配字符串2. 使用search方法在一个字符串中查找模式1.使用match方法匹配字符串 匹配字符串是正则表达式中最常用的一类应用。也就是设定一个文本模式,然后判断另外一个字符串是否符合这个文本模式。本节会从最简单的文本模式开始。如果文本模式只是一个普通的字符串,那么待匹配的字符串和文本模式字符串在完全相等的情况下,match方法会认为匹配成功。现在我们来讲一下match方法,该方法用于指定文本模式和待匹配...原创 2021-09-22 10:13:36 · 248 阅读 · 0 评论 -
Python爬虫编程思想(30):用正则表达式匹配多个字符串和任意单个字符
目录1. 匹配多个字符串2. 匹配任何单个字符1. 匹配多个字符串在前面的例子中,只是通过search方法搜索一个字符串,那么如果要搜索多个字符串呢?例如,搜索bike、car和truck。最简单的方法是在文本模式字符串中使用择一匹配符号(|),那么什么是择一匹配符号呢?其实就和逻辑或类似,只要满足任何一个,就算匹配成功。s = 'bike|car|truck' # 定义使用择一匹配符号的文本模式字符串m = re.match(s, 'bike') ...原创 2021-09-22 10:20:44 · 1431 阅读 · 0 评论 -
Python爬虫编程思想(31):在正则表达式中使用字符集、匹配重复、可选字符和特殊字符
目录 1. 使用字符集2. 匹配重复、可选字符和特殊字符1. 使用字符集如果待匹配的字符串中,某些字符可以有多个选择,就需要使用字符集([ ]),也就是一对中括号括起来的字符串。例如,[abc]表示a、b、c三个字符可以取其中任何一个,相当于“a|b|c”,所以对单个字符使用或关系时,字符集和择一匹配符的效果是一样的。m = re.match('[abcd]', 'a') # 使用字符集,匹配成功print(m.group()) # 运行...原创 2021-09-22 10:35:11 · 270 阅读 · 0 评论 -
Python爬虫编程思想(32):正则表达式的分组
如果一个模式字符串中有用一对圆括号括起来的部分,那么这部分就会作为一组,可以通过group方法的参数获取指定的组匹配的字符串,当然,如果模式字符串中没有任何用圆括号括起来的部分,那么就不会对待匹配的字符串进行分组。m = re.match('(\d\d\d)-(\d\d)', '123-45')在上面的代码中,模式字符串可以匹配以3个数字开头,后面跟着一个连字符(-),最后跟着两个数字的字符串。由于“\d\d\d”和“\d\d”都在圆括号中,所...原创 2021-09-22 10:38:55 · 248 阅读 · 0 评论 -
Python爬虫编程思想(33):匹配字符串的起始和结尾以及单词边界
“^”符号用于表示匹配字符串的开始,“$”符号用于表示匹配字符串的结束,“\b”符号用于表示单词的边界。这里的边界是指单词两侧是空格或标点符号。例如“ abc?”可以认为abc两侧都有边界,左侧是空格,右侧是问号(?),但“ abcx”就不能认为abc右侧有边界,因为“x”和“abc”都可以认为是单词。下面的例子演示了如何匹配字符串的起始和结束,以及单词边界的匹配。import re# 匹配成功m = re.search('^The', 'The end.')pri...原创 2021-09-25 21:45:10 · 636 阅读 · 0 评论 -
Python爬虫编程思想(34):使用findall和finditer查找每一次出现的位置
findall函数用于查询字符串中某个正则表达式模式全部的非重复出现情况,这一点与search函数在执行字符串搜索时类似,但与match函数与search函数不同之处在于,findall函数总是返回一个包含搜索结果的列表,如果findall函数没有找到匹配的部分,就会返回一个空列表,如果匹配成功,列表将包含所有成功的匹配部分(从左向右按匹配顺序排列)。result = re.findall('bike', 'bike')# 运行结果:['bike']print(result) ...原创 2021-09-25 21:56:21 · 1059 阅读 · 0 评论 -
Python爬虫编程思想(35):用正则表达式搜索、替换和分隔字符串
目录1. 用sub和subn搜索与替换2. 使用split分隔字符串1. 用sub和subn搜索与替换sub函数与subn函数用于实现搜索和替换功能。这两个函数的功能几乎完全相同,都是将某个字符串中所有匹配正则表达式的部分替换成其他字符串。用来替换的部分可能是一个字符串,也可以是一个函数,该函数返回一个用来替换的字符串。sub函数返回替换后的结果,subn函数返回一个元组,元组的第1个元素是替换后的结果,第2个元素是替换的总数。替换的字符串可以是普通的字符...原创 2021-09-29 08:46:29 · 274 阅读 · 0 评论 -
Python爬虫编程思想(36):项目实战-抓取斗破小说网的目录和全文
到现在为止我们已经学习了3个Python网络库(urllib、urllib3和requests),以及通过正则表达式过滤字符串。现在该来点实战了。本节以及后面2节会给出3个案例,分别使用urllib、urllib3以及requests,并通过正则表达式抓取Web数据,这些数据或者显示在Console中,或者保存到文本文件中。本文要实现的案例是通过urllib库抓取斗破小说网(http://www.doupoxs.com)上指定的小说的目录和每一节的完整内容(只保留纯文本内...原创 2021-09-29 08:56:19 · 383 阅读 · 0 评论 -
Python爬虫编程思想(37):项目实战:抓取猫眼电影Top100榜单
本文会使用urllib3抓取猫眼电影Top100榜单,读者使用下面的URL进入Top100榜单页面。https://maoyan.com/board/4Top100榜单页面如图1所示。从Top100榜单页面可以看出,每一页有10部电影,共10页,一共100部电影。页面下方是导航,用于切换1至10个页面。这个爬虫的目的就是抓取这100部电影的信息(如电影封面图像的URL、电影名称、演员列表、评分、上映时间等),然后将这些数据以JSON格式保存到名为board.txt的文本...原创 2021-10-05 22:27:45 · 545 阅读 · 0 评论 -
Python爬虫编程思想(38):项目实战:抓取糗事百科网的段子
本节的项目会使用requests库抓取糗事百科网的段子,读者可以用下面的URL访问访问糗事百科段子页面。https://www.qiushibaike.com/text页面如图1所示。在页面的下方是带有数字链接的导航条,可以切换到不同的页面,每一页会显示一定数量的段子。所以要实现抓取多页段子的爬虫,不仅要分析当前页面的HTML代码,还要可以抓取多页的HTML代码。现在切换到其他页面,看一下URL的规律。第1、2、3也对应的URL如下:...原创 2021-10-05 22:32:37 · 239 阅读 · 0 评论 -
Python爬虫编程思想(39):使用lxml解析HTML与XML
目录1. 安装lxml2. 操作XML3. 操作HTML lxml是Python的一个解析库,用于解析HTML和XML,支持XPath解析方式。由于lxml底层是使用C语言编写的,所以解析效率非常高。本节会介绍lxml在Windows、Linux和Mac OS X下的安装方式,以及lxml的基本使用方法。1. 安装lxml(1)相关链接lxml官网:https://lxml.de lxml在Github的地址:https://github.c...原创 2021-10-06 07:39:12 · 442 阅读 · 0 评论 -
Python爬虫编程思想(40):XPath基础
目录 1 XPath概述2. 使用XPathXPath的英文全称是XML Path Language,中文是XML路径语言,它是一种在XML文档中查找信息的语言,最初是用于在XML文档中搜索节点的,但同样可用于HTML文档的搜索,因为XML与HTML是同源的。1 XPath概述XPath的功能非常强大,它提供了非常简单的路径选择表达式。另外,它还提供了超过100个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等。几乎所有我们想...原创 2021-10-06 09:04:06 · 237 阅读 · 0 评论