[实例]抓取猫眼电影排行榜

发布时间:2024-03-12 14:30:00

本节使用 Python 爬虫抓取猫眼电影网 TOP100 排行榜(https://maoyan.com/board/4)影片信息,包括电影名称、上映时间、主演信息。

在开始编写程序之前,首先要确定页面类型(静态页面或动态页面),其次找出页面的 url 规律,最后通过分析网页元素结构来确定正则表达式,从而提取网页信息。

确定页面类型

点击右键查看页面源码,确定要抓取的数据是否存在于页面内。通过浏览得知要抓取的信息全部存在于源码内,因此该页面输属于静态页面。如下所示:

我不是药神主演:徐峥,周一围,王传君上映时间:2018-07-05

确定url规律

想要确定 url 规律,需要您多浏览几个页面,然后才可以总结出 url 规律,如下所示:

第一页:https://maoyan.com/board/4?offset=0
第二页:https://maoyan.com/board/4?offset=10
第三页:https://maoyan.com/board/4?offset=20
...
第n页:https://maoyan.com/board/4?offset=(n-1)*10

确定正则表达式

通过分析网页元素结构来确定正则表达式,如下所示:

       我不是药神                       主演:徐峥,周一围,王传君
       上映时间:2018-07-05

使用 Chrome 开发者调试工具来精准定位要抓取信息的元素结构。之所以这样做,是因为这能避免正则表达式的冗余,提高编写正则表达式的速度。正则表达式如下所示:

.*?title="(.*?)".*?class="star">(.*?).*?releasetime">(.*?)
编写正则表达式时将需要提取的信息使用(.*?)代替,而不需要的内容(包括元素标签)使用.*?代替。
	编写爬虫程序下面使用面向对象的方法编写爬虫程序,主要编写四个函数,分别是请求函数、解析函数、保存数据函数、主函数。from urllib import request
import re
import time
import random
import csv
from ua_info import ua_list

# 定义一个爬虫类
class MaoyanSpider(object): 
    # 初始化
    # 定义初始页面url
    def __init__(self):
        self.url = 'https://maoyan.com/board/4?offset={}'
    
    # 请求函数
    def get_html(self,url):
        headers = {'User-Agent':random.choice(ua_list)}
        req = request.Request(url=url,headers=headers)
        res = request.urlopen(req)
        html = res.read().decode()
        # 直接调用解析函数
        self.parse_html(html)
    
    # 解析函数
    def parse_html(self,html):
        # 正则表达式
        re_bds = '