一.准备工作
如下:
安装
安装好Python3,最低为3.6 版本,并能成功运行 Python3 程序。
2.了解http和requests
Python HTTP请求库requests 的基本用法。
2.1.HTTP超文本(hyper text)
是一种含有特殊标记的文本文件,比如表示网页的HTML源代码、表示图片的二进制数据。)传输协议(Hyper Text Transfer Protocol),用于从网络传输超文本数据到本地浏览器的传送协议。能够保障高效而准确的传输超文本文档(超文本目前广泛使用的是HTTP1.1的版本,当然现在有不少网站支持HTTP2.0的版本。
HTTPS是以安全为目标的HTTP通道。
HTTPS在HTTP的基础上加入SSL(安全的基础),提供了身份验证与加密通讯方法。
2.1.1请求Request
1.请求
请求,英文为Request,由客户端发往服务器,分为四部分内容: 请求方法(Request Method).请求的网址(Request URL )、请求头( Request Headers )、请求体(Request Body )。
请求方法,用于标识请求客户端请求服务端的方式,常见的请求方法有两种:GET和POST。
在浏览器中直接输人 URL 并回车,便发起了一个 GET 请求,请求的参数会直接包含到 URL里.
我们平常遇到的绝大部分请求是 GET 或 POST 请求。
请求的网址,它可以唯一确定客户端想请求的资源。
请求头,用来说明服务器要使用的附加信息,比较重要的信息有 Cookie、Referer、User-Agent等。
一般承载的内容是 POST 请求中的表单数据,对于 GET 请求,请求体为空
2.响应
响应,即 Response,由服务器返回给客户端,可以分为三部分:响应状态码( Response Status Code ).响应头(Response Headers) 和响应体( Response Body )。
响应状态码,表示服务器的响应状态
响应头,包含了服务器对请求的应答信息,如 Content-Type、Server、Set-Cookie等。
响应体,这可以说是最关键的部分了,响应的正文数据都存在于响应体中,例如请求网页时,响应体就是网页的 HTML代码;请求一张图片时,响应体就是图片的二进制数据。我们做爬虫请求网页时,要解析的内容就是响应体在浏览器开发者工具中单击 Preview,就可以看到网页的源代码。爬虫的解析目标是响应体,在做爬虫时,我们主要通过响应体得到网页的源代码、JSON 数据等,然后从中提取相应内容。
2.1.2了解正则表达式
正则表达式的用法和 Python 中正则表达式库 re 的基本用法。
1..正则表达式匹配
正则表达式匹配,也就是用一定的规则将特定文本提取出来。
常用的一些匹配规则。
![](https://i-blog.csdnimg.cn/blog_migrate/a1a5cd2f48ab125ac71db60be12f816a.png)
其实正则表达式并非Python 独有,它也可以用在其他编程语言中。但是 Python 的 re 库提供了整个正则表达式的实现,利用这个库,可以在 Python 中方便地使用正则表达式。用 Python 编写正则表达式时几乎都会使用这个库。
1..1常用的匹配方法---match
match,向它传人要匹配的字符串以及正则表达式,就可以检测这个正则表达式是否和字符串相匹配。
match 方法会尝试从字符串的起始位置开始匹配正则表达式,如果匹配,就返回匹配成功的结果;如果不匹配,就返回 None。
match 方法在使用时需要考虑目标宇符串开头的内容,因此在做匹配时并不方便。它更适合检测某个字符串是否符合某个正则表达式的规则。
.2通用匹配
刚才我们写的正则表达式其实比较复杂,只要出现空白字符就需要写\s 匹配,出现数字就需要写\d匹配,这样的工作量非常大。其实完全没必要这么做,因为还有一个万能匹配可以用,就是.*。其中。.可以匹配任意字符(除换行符 ),* 代表匹配前面的字符无限次,所以它们组合在一起就可以匹配任意字符了。有了它,我们就不用挨个字符进行匹配了。
1..3贪婪与非贪婪
在做匹配的时候,字符串中间尽量使用非贪婪匹配,也就是用 .*? 代替 .*,以免出现匹配结果缺失的情况。但这里需要注意,如果匹配的结果在字符串结尾,.*? 有可能匹配不到任何内容了,因为它会匹配尽可能少的字符.在贪婪匹配下,.* 会匹配尽可能多的字符。正则表达式中.*后面是\d+,也就是至少一个数字,而且没有指定具体几个数字,因此,.* 会匹配尽可能多的字符。非贪婪匹配的写法是.*?,比通用匹配多了一个 ?
在正则表达式中,可以用一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。
这个修饰符的作用是使匹配内容包括换行符在内的所有字符
修饰符,这个 re.S 在网页匹配中经常用到。因为 HTML 节点经常会有换行,加上它,就可以匹配节点与节点之间的换行了。
另外,还有一些修饰符,在必要的情况下也可以使用,如表 2-3 所示:
![](https://i-blog.csdnimg.cn/blog_migrate/130a2acd6d6c4d8759bbc68c7ec5146f.png)
1..4 search
search,它在匹配时会扫描整个字符串,然后返回第一个匹配成功的结果。也就是说,正则表达式可以是字符串的一部分。在匹配时,search 方法会依次以每个字符作为开头扫描字符串,直到找到第一个符合规则的字符串,然后返回匹配内容; 如果扫描完还没有找到符合规则的字符串,就返回 None。
.5findall
如果想要获取与正则表达式相匹配的所有字符串,该如何处理呢?这就要借助 findall 方法了
总结一下,如果只想获取匹配到的第一个字符串,可以用 search 方法;如果需要提取多个内容,可以用 findall 方法。
.6 sub
除了使用正则表达式提取信息,有时候还需要借助它来修改文本。例如,想要把一串文本中的所有数字都去掉,如果只用字符串的 replace 方法,未免太烦琐了,这时可以借助 sub 方法。
1..7.compile
前面所讲的方法都是用来处理字符串的方法,最后再介绍一下 compile 方法,这个方法可以将正则字符串编译成正则表达式对象,以便在后面的匹配中复用。
二.爬虫目标
本节我们以一个基本的静态网站作为案例进行爬取,需要爬取的链接为