运用正则爬取猫眼电影流程

一、爬虫爬取网站流程
1、分析网站的数据来源

​ 分析网站结构,待爬取数据在哪。

2、查看页面数据能否通过requests模块获取到

​ (1)在开发者工具中,找到页面的url对应的请求。通过这条请求的信息来进行程序的书写。
​ (2)在代码中通过requests模块封装请求头,查看response.text中是否有页面数据。

3、如果有数据,就考虑是否有分页,分页如何实现
4、实现分页之后就可以提取数据,保存数据了
二、爬取猫眼电影实例

下面以爬取猫眼电影的电影信息为例,运用正则,介绍爬取网页的详细流程

1、定义爬取网页数据的主函数

确定基础url,封装请求头,确定爬取页数。

import requests,re,json

# 主函数,爬取网页
def main():
    base_url = 'https://maoyan.com/board/4?offset=%s'  # 先在这里将分页的格式写好
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
        'Referer': 'https://maoyan.com/board/',
        # 为确保请求成功,最好加上cookie
    }
    for i in range(10):  # 爬取前十页
        response = requests.get(base_url%(i*10),headers=headers)
        # print(response.text)  # 测试
        parse_page(response.text)  # 调用读取、筛选数据函数
2、定义获取、过滤数据的函数

用正则匹配原则:不断搜小匹配范围,最后做到精确匹配,得到想要的数据。

movies = []   # 定义列表,将字典存储在列表中
# 过滤、筛选数据
def parse_page(html_str):
    # (.*?) 非贪婪模式下匹配任意字符 , re.S 将换行符 '\n' 变成字符串
    dd_p = re.compile(r'<dd>(.*?) </dd>',re.S)  # 非贪婪匹配
    dd_lst = dd_p.findall(html_str)  # 调用findall方法,得到列表页面
    for dd in dd_lst:  # 获得每一个电影的字符串格式数据
        # 电影名称
        title_p = re.compile(r'title="(.*?)" class',re.S)
        title = title_p.search(dd).group(1)
        # 主演
        actors_p = re.compile(r'"star">(.*?)</p>',re.S)
        actors = actors_p.search(dd).group(1).strip() # strip() 去除空格
        # 评分
        score_p = re.compile(r'integer">(.*?)</i><i class="fraction">(.*?)</i>')
        score_lst = score_p.findall(dd)
        # print(score_lst)  # [('9.', '5')]   多个分组时,会以元组的形式添加到列表中
        score = ''.join(score_lst[0])
        # 定义字典,保存每一部电影信息
        item = {}
        item['title'] = title
        item['actors'] = actors
        item['score'] = score
        movies.append(item)  # 将字典存储在列表中
3、保存数据

调用json模块的 **json.dump()**方法,保存数据。

def write_to_file(filename,lst): # 需要传两个参数
    with open(filename,'w',encoding='utf-8')as f:
        json.dump(lst,f)

以上函数定义好,接下来执行函数,爬取网页信息。

if __name__ == '__main__':
    main()  # 执行主函数,爬取网页
    write_to_file('moves.json', movies)  # 执行保存函数
4、读取数据

从保存的json数据中,调用 json.load()方法,读取数据。

 # 从json文件中读取数据
    move_list = json.load(open('moves.json','r'))
    print(move_list)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值