爬虫的案例分析在线

本篇博客详细介绍了如何使用Python爬虫进行网页抓取,从理解HTTP协议、requests库的使用,到正则表达式的匹配方法,再到爬取电影列表页和详情页的全过程。博主通过实例分析,演示了如何提取电影的封面、名称、类别、上映时间和评分等信息,并保存为JSON文件。此外,还探讨了多进程加速爬取的可能性。
摘要由CSDN通过智能技术生成

一.准备工作

如下:

  1. 安装

安装好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..正则表达式匹配

正则表达式匹配,也就是用一定的规则将特定文本提取出来。

常用的一些匹配规则。

其实正则表达式并非Python 独有,它也可以用在其他编程语言中。但是 Python 的 re 库提供了整个正则表达式的实现,利用这个库,可以在 Python 中方便地使用正则表达式。用 Python 编写正则表达式时几乎都会使用这个库。

1..1常用的匹配方法---match

match,向它传人要匹配的字符串以及正则表达式,就可以检测这个正则表达式是否和字符串相匹配。

match 方法会尝试从字符串的起始位置开始匹配正则表达式,如果匹配,就返回匹配成功的结果;如果不匹配,就返回 None。

match 方法在使用时需要考虑目标宇符串开头的内容,因此在做匹配时并不方便。它更适合检测某个字符串是否符合某个正则表达式的规则。

  1. .2通用匹配

刚才我们写的正则表达式其实比较复杂,只要出现空白字符就需要写\s 匹配,出现数字就需要写\d匹配,这样的工作量非常大。其实完全没必要这么做,因为还有一个万能匹配可以用,就是.*。其中。.可以匹配任意字符(除换行符 ),* 代表匹配前面的字符无限次,所以它们组合在一起就可以匹配任意字符了。有了它,我们就不用挨个字符进行匹配了。

1..3贪婪与非贪婪

在做匹配的时候,字符串中间尽量使用非贪婪匹配,也就是用 .*? 代替 .*,以免出现匹配结果缺失的情况。但这里需要注意,如果匹配的结果在字符串结尾,.*? 有可能匹配不到任何内容了,因为它会匹配尽可能少的字符.在贪婪匹配下,.* 会匹配尽可能多的字符。正则表达式中.*后面是\d+,也就是至少一个数字,而且没有指定具体几个数字,因此,.* 会匹配尽可能多的字符。非贪婪匹配的写法是.*?,比通用匹配多了一个 ?

在正则表达式中,可以用一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。

这个修饰符的作用是使匹配内容包括换行符在内的所有字符

修饰符,这个 re.S 在网页匹配中经常用到。因为 HTML 节点经常会有换行,加上它,就可以匹配节点与节点之间的换行了。

另外,还有一些修饰符,在必要的情况下也可以使用,如表 2-3 所示:

1..4 search

search,它在匹配时会扫描整个字符串,然后返回第一个匹配成功的结果。也就是说,正则表达式可以是字符串的一部分。在匹配时,search 方法会依次以每个字符作为开头扫描字符串,直到找到第一个符合规则的字符串,然后返回匹配内容; 如果扫描完还没有找到符合规则的字符串,就返回 None。

  1. .5findall

如果想要获取与正则表达式相匹配的所有字符串,该如何处理呢?这就要借助 findall 方法了

总结一下,如果只想获取匹配到的第一个字符串,可以用 search 方法;如果需要提取多个内容,可以用 findall 方法。

  1. .6 sub

除了使用正则表达式提取信息,有时候还需要借助它来修改文本。例如,想要把一串文本中的所有数字都去掉,如果只用字符串的 replace 方法,未免太烦琐了,这时可以借助 sub 方法。

1..7.compile

前面所讲的方法都是用来处理字符串的方法,最后再介绍一下 compile 方法,这个方法可以将正则字符串编译成正则表达式对象,以便在后面的匹配中复用。

二.爬虫目标

本节我们以一个基本的静态网站作为案例进行爬取,需要爬取的链接为

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值