今天学习了《python3网络爬虫开发实战》的正则表达式部分,紧接着是一个爬虫小项目:爬取猫眼电影排行,看着没什么难度,就想自己来独立完成这个项目,部分参考了书上的代码。
项目目标
利用正则表达式抓取猫眼电影TOP100电影信息并保存。
用到的库
requests库、re库
初步分析
猫眼电影TOP100 的链接地址是https://maoyan.com/board/4
,打开以后是这样的:
把它拉到最下方,是有分页的,点击第二页:
我们可以看到页面的URL变成了https://maoyan.com/board/4?offset=10
,由此可以推测出改变offset就可以改变页面显示的电影(读者可以自行在URL上任意修改数字),offset=n的时候,页面显示排名第n~n+10的电影,所以,我们通过改变offset的值可以抓取所有的页面。
获取单页
首先要获取到页面,这里使用requests库。
import requests as req
def get_one_page(url):
#设置headers伪造浏览器信息
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"}
#获取页面
response = req.get(url, headers=headers)
#状态码200代表成功
if 200 == response.status_code:
return response.text
return None
构造分析器
首先我们要查看网页的源代码(Ctrl+U):
可以看到:一部电影的信息是夹在 <dd>....</dd>
标签中间的,同理,我们可以找到电影的名称、主演、上映时间等信息。
接下来要构造函数来分析这个页面,用到了re库。
import re
def parse_one_page(html):
#找到所有的电影
films = re.findall('<dd>.*?</dd>', html, re.S)
films_info = []
for film in films:
film_info = {
}
#利用正则表达式获取电影的各种信息
ranking = re.search('<i class="board-index.*?>(\d+)</i>', film, re