爬取猫眼电影

本文分享了使用Python的requests模块和xpath爬取猫眼电影正在热映栏目信息的经验,包括评分处理技巧,并介绍了如何将数据保存至MySQL数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在系统的学习爬虫,为了练手,试着爬了一下猫眼的最近热播的电影。

爬取猫眼电影信息不需要登录账号,省去了设置cookie等一些步骤。猫眼电影中有很多个栏目,我爬取的则是“正在热映”这个栏目(截图如下)。本次爬取用的是python的requests模块以及xpath。

 

 

点击图中的“全部”即可获得该页面的url。在浏览器开发者工具下,可以看出每部电影的海报以及评分在<dl class="movie-list">中,其中每一个<dd>标签都包含一部电影的信息。这个就是我们的目标,我们可以从<dd>标签中通过xpath来提取信息。但是有意思的一点是,评分这一项信息是有坑的。分析标签可以看到,如果有评分的话,评分的整数部分和小数部分是分别放在两个<i>标签的。但是暂无评分的话,就是放在<div>标签里,所以想要直接一次性把评分提取出来,比较困难。可以采用点小技巧,直接将评分这一部分全部爬取下来,然后将有评分的部分筛选出来,使用拼接字符串的方法,将评分补全。

 

 

数据爬取之后,将数据保存在mysql中,还需要使用的pymysql模块。话不多说,直接上代码吧。

import requests
from lxml import etree
import pymysql
pymysql.install_as_MySQLdb()
db = pymysql.connect(host="localhost", user="root", password="xxxxxx", charset="utf8", db="python")
cursor = db.cursor()


def run(url):
    response = requests.get(url=url)
    # parser = etree.HTMLParser()
    html = etree.HTML(response.text)
    dl = html.xpath("//div/div[2]/div[2]/dl")
    for dd in dl:
        names = dd.xpath(".//div[2]/a/text()")
        scores = dd.xpath(".//div[3]//text()")
    count = len(scores)
    print(count)
    for i in range(0, count):
        if len(scores[i]) == 2 and len(scores[i+1]) == 1:
            scores[i] = scores[i]+scores[i+1]
    # print(scores)
    cursor.execute("""CREATE TABLE `mao_yan`  (
                            `id` int(20),
                            `name` varchar(255) NULL,
                            `score` varchar(255) NULL,
                            PRIMARY KEY (`id`));""")
    i = 0
    for name in names:
        score = scores[i]
        if len(score) >= 3:
            cursor.execute('INSERT INTO mao_yan(id,name,score) VALUE ("%d","%s","%s");' % (i+1, name, score))
            db.commit()
            i = i+1
        else:
            i = i + 1
            continue
    cursor.close()
    db.close()


if __name__ == '__main__':
    url = "https://maoyan.com/films?showType=1"
    run(url=url)

在Navicat中可以查看到程序执行的结果。

当然,由于python基础不是很好,代码其实写得不怎么样,还有许多小问题。后面会进行修改和优化的。

 

 

 

 

 

 

 

 

### 如何用 Python 爬取猫眼电影数据 #### 数据采集思路 在爬取猫眼电影数据的过程中,通常需要遵循以下几个核心环节:目标网页定位、请求发送、HTML 解析以及数据存储。具体而言: 1. **目标网页定位** 需要明确猫眼电影的目标页面 URL 地址及其结构特点。例如,猫眼电影票房排行榜的地址可能类似于 `https://maoyan.com/board/4`[^1]。 2. **请求发送** 使用 Python 的第三方库如 `requests` 或 `urllib` 发送 HTTP 请求来获取 HTML 页面内容。需要注意的是,在某些情况下,目标网站可能会设置反爬机制,因此可以通过模拟浏览器行为(如添加 User-Agent 头部信息)来规避检测[^3]。 3. **HTML 解析** 利用解析工具提取所需的信息字段。常用的工具有 BeautifulSoup 和 lxml 库。通过观察网页源码中的标签和属性可以准确定位到感兴趣的数据项,比如电影名称、评分、上映时间等[^2]。 4. **数据存储** 将抓取下来的数据整理成结构化形式并保存至本地文件系统中,常见的做法是以 CSV 文件格式存档以便后续处理与分析。 #### 示例代码实现 以下是基于上述逻辑的一个简单示例脚本用于演示如何从猫眼电影站点收集基本信息: ```python import requests from bs4 import BeautifulSoup import csv def fetch_movie_data(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) soup = BeautifulSoup(response.text, 'html.parser') movies = [] for item in soup.select('.board-wrapper dd'): rank = item.find('i', class_='board-index').text.strip() name = item.find('p', class_='name').a['title'].strip() star = item.find('p', class_='star').text.strip().split(':')[-1].strip() releasetime = item.find('p', class_='releasetime').text.split(':')[-1].strip() movie_info = {'rank': rank, 'name': name, 'star': star, 'releasetime': releasetime} movies.append(movie_info) return movies if __name__ == "__main__": url = "https://maoyan.com/board/4" data = fetch_movie_data(url) keys = ['rank','name','star','releasetime'] with open('movie_rankings.csv', mode='w', newline='', encoding='utf-8-sig') as file: writer = csv.DictWriter(file, fieldnames=keys) writer.writeheader() writer.writerows(data) ``` 此段代码实现了基本功能模块的设计,并提供了清晰的操作流程说明. #### 注意事项 当执行此类网络爬虫项目时,请务必尊重目标网站的服务条款和服务协议,合理控制访问频率以免给服务器带来过大压力;另外也要注意个人信息保护等相关法律法规的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值