爬取猫眼 TOP100 电影并以 excel 格式存储

爬取目标

本文将提取猫眼电影 TOP100 排行榜的电影名称、时间、评分、图片等信息,URL 为http://maoyan.com/board/4,提取的结果我们以 excel 格式保存下来。

准备工作

保证电脑安装了 python3.6 和已经安装好了 requests 库、beautifulsoup 库和 openpyxl 库。
前期安装步骤可以参考:https://germey.gitbooks.io/python3webspider/1-%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE.html

爬取分析

打开http://maoyan.com/board/4我们会发现榜单主要显示 4 个数据:电影名、主演、上映时间和评分。
如图所示:榜单

网页下滑到最下方可以发现有分页的列表,我们点击一下第二页会发现页面的 URL 变成了http://maoyan.com/board/4?offset=10,比之前的页面多了一个 offset=10 的参数,而且页面显示的是排行 11-20 名的电影。

由此我们可以总结出规律,offset 代表了一个偏移量值,如果偏移量为 n,则显示的电影序号就是 n+1 到 n+10,每页显示 10 个。所以我们如果想获取 TOP100 电影,只需要分开请求 10 次,而 10 次的 offset 参数设置为 0,10,20,…,90 即可,这样我们获取不同的页面结果之后再用正则表达式提取出相关信息就可以得到 TOP100 的所有电影信息了。

抓取首页

import requests

def get_one_page(url):
    response = requests.get(url)
    if response.status_code == 200:
        return response.text
    return None

def main():
    url = 'http://maoyan.com/board/4'
    html = get_one_page(url)
    print(html)

main()

这样我们就可以获取首页的源代码了,获取源代码之后我们要对页面进行解析,提取出我们想要的信息。

使用 BeautifulSoup 进行提取

接下来我们回到网页看一下页面的真实源码,在开发者工具中 Network 监听(建议使用谷歌浏览器,按 F12 即可查看网页信息),然后查看一下源代码。如图所示:

### 使用Python的re和csv模块爬取猫眼Top100电影数据并保存到CSV文件 要使用Python中的`re`和`csv`模块爬取猫眼Top100电影数据,并将其保存到CSV文件中,可以按照以下方法实现。此过程涉及网页请求、正则表达式匹配以及CSV文件写入等步骤。 #### 1. 网页请求 首先需要发送HTTP请求获取目标网页的内容。可以使用`requests`库来完成这一任务。以下是代码示例: ```python import requests url = "https://maoyan.com/board/4?offset=0" # 示例URL headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } response = requests.get(url, headers=headers) html_content = response.text ``` 此处通过设置`User-Agent`头信息模拟浏览器访问,以避免反爬虫机制的影响[^1]。 #### 2. 正则表达式提取数据 使用`re`模块从HTML内容中提取所需的数据。例如,提取电影排名、标题、主演、上映时间等信息。以下是正则表达式的示例代码: ```python import re # 匹配电影排名 rank_pattern = re.compile(r'<i class="board-index.*?>(\d+)</i>', re.S) ranks = rank_pattern.findall(html_content) # 匹配电影名称 title_pattern = re.compile(r'<a href="/films/\d+" title="(.*?)"', re.S) titles = title_pattern.findall(html_content) # 匹配主演 actor_pattern = re.compile(r'<p class="star">(.*?)</p>', re.S) actors = [actor.strip() for actor in actor_pattern.findall(html_content)] # 匹配上映时间 time_pattern = re.compile(r'<p class="releasetime">(.*?)</p>', re.S) times = time_pattern.findall(html_content) ``` 上述代码分别定义了用于匹配电影排名、标题、主演和上映时间的正则表达式,并提取出对应的信息[^2]。 #### 3. 数据保存到CSV文件 最后,使用`csv`模块将提取的数据保存到CSV文件中。以下是代码示例: ```python import csv # 将数据写入CSV文件 with open("maoyan_top100.csv", mode="w", newline="", encoding="utf-8") as file: writer = csv.writer(file) writer.writerow(["Rank", "Title", "Actor", "Time"]) # 写入表头 for i in range(len(ranks)): writer.writerow([ranks[i], titles[i], actors[i], times[i]]) ``` 此代码片段创建了一个名为`maoyan_top100.csv`的文件,并将提取的电影数据按行写入其中。 #### 注意事项 - 在实际操作中,可能需要分页抓取数据。可以通过修改URL中的`offset`参数(如`offset=0`, `offset=10`等)实现多页数据的爬取。 - 需要确保目标网站允许爬虫访问其数据,遵守相关法律法规及网站的`robots.txt`协议。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值