使用selenium爬取猫眼电影榜单数据

该文介绍了如何利用Python的Selenium库自动化操作浏览器,通过ChromeDriver设置和XPath定位,爬取猫眼电影排行榜的数据,包括电影名称、导演和评分,并将这些信息存储到DataFrame,最终导出为Excel文件。

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

前言

在这里插入图片描述

近年来,随着互联网的快速发展和人们对电影需求的增加,电影市场也变得日趋繁荣。作为观众或者投资者,我们时常需要了解最新的电影排行榜和票房情况。本文将介绍如何使用Python编写一个爬虫脚本,通过Selenium库自动化操作浏览器,爬取猫眼电影榜单数据,并保存为Excel文件。

导入所需的库:

在这里插入图片描述

  • import time:导入时间模块,用于添加延时等待。
  • from selenium import webdriver:导入Selenium库中的webdriver模块,用于创建浏览器实例和自动化操作。
  • from selenium.webdriver.common.by import By:导入Selenium库中的By模块,用于XPath定位元素。
  • import pandas as pd:导入pandas库,用于处理和分析数据。

设置ChromeDriver的路径,并创建一个Chrome浏览器实例:

在这里插入图片描述

driver_path = 'ChromeDriver的路径'
driver = webdriver.Chrome(driver_path)

打开目标网页,这里以猫眼电影榜单页面为例:

在这里插入图片描述

url = 'https://www.maoyan.com/board?timeStamp=1688716544141&sVersion=1&webdriver=false&index=3&signKey=44a722f975ab0b6750812bd0bf340b88&channelId=40011&requestCode=49793531118b4af79a95958d845ab0a7lgmud'
driver.get(url)
time.sleep(5)

使用XPath定位电影信息。通过查看网页源代码,发现电影信息所在的<dd>标签具有唯一的class属性名:

在这里插入图片描述

info = driver.find_element(By.CLASS_NAME, "board-wrapper")
ddlist = info.find_elements(By.TAG_NAME, "dd")

遍历所有的<dd>标签,获取电影名称、导演和评分,并将数据保存到DataFrame中:

data = pd.DataFrame(columns=['电影名称', '导演', '评分'])
i = 0
for item in ddlist:
    titles = item.find_element(By.CLASS_NAME, "board-item-main").find_element(By.CLASS_NAME, "name").text
    directors = item.find_element(By.CLASS_NAME, "star").text
    scores = item.find_element(By.CLASS_NAME, "releasetime").text
    data.loc[i] = [titles, directors, scores]
    i += 1
    print(f"电影名称:{titles},导演:{directors},评分:{scores}")

将DataFrame导出为Excel文件:

output_path = '猫眼.xlsx'
data.to_excel(output_path, index=False)

关闭浏览器:

driver.quit()

通过以上代码,我们成功实现了使用Python爬取猫眼电影榜单数据的功能。

完整代码

在这里插入图片描述

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
import pandas as pd

# 设置ChromeDriver的路径
driver_path = ''

# 创建Chrome浏览器实例
driver = webdriver.Chrome(driver_path)

# 打开目标网页
url = 'https://www.maoyan.com/board?timeStamp=1688716544141&sVersion=1&webdriver=false&index=3&signKey=44a722f975ab0b6750812bd0bf340b88&channelId=40011&requestCode=49793531118b4af79a95958d845ab0a7lgmud'
driver.get(url)
time.sleep(5)
# 使用XPath定位电影信息
info = driver.find_element(By.CLASS_NAME, "board-wrapper")
ddlist = info.find_elements(By.TAG_NAME, "dd")
# print(ddlist)
data = pd.DataFrame(columns=['电影名称', '导演', '评分'])
i = 0
for item in ddlist:
    # print(item)
    # 获取所有电影信息
    titles = item.find_element(By.CLASS_NAME, "board-item-main").find_element(By.CLASS_NAME, "name").text
    directors = item.find_element(By.CLASS_NAME, "star").text
    scores = item.find_element(By.CLASS_NAME, "releasetime").text
    data.loc[i] = [titles, directors, scores]
    i += 1
    print(f"titles{titles}, directors{directors} , scores{scores}")

# # 将DataFrame导出为Excel文件
output_path = '猫眼.xlsx'
data.to_excel(output_path, index=False)
#
# # 关闭浏览器
driver.quit()

分点说明

  1. import time:导入时间模块,用于添加延时等待。

  2. from selenium import webdriver:导入Selenium库中的webdriver模块,用于创建浏览器实例和自动化操作。

  3. from selenium.webdriver.common.by import By:导入Selenium库中的By模块,用于XPath定位元素。

  4. import pandas as pd:导入pandas库,用于处理和分析数据。

  5. driver_path = '':设置ChromeDriver的路径,填写你的ChromeDriver路径。

  6. driver = webdriver.Chrome(driver_path):创建一个Chrome浏览器实例。

  7. url = 'https://www.maoyan.com/board?timeStamp=1688716544141&sVersion=1&webdriver=false&index=3&signKey=44a722f975ab0b6750812bd0bf340b88&channelId=40011&requestCode=49793531118b4af79a95958d845ab0a7lgmud':目标网页的URL。

  8. driver.get(url):打开目标网页。

  9. time.sleep(5):等待5秒,确保页面加载完成。

  10. info = driver.find_element(By.CLASS_NAME, "board-wrapper"):使用By.CLASS_NAME通过class名称定位电影信息所在的元素。

  11. ddlist = info.find_elements(By.TAG_NAME, "dd"):使用By.TAG_NAME通过标签名称定位所有电影信息所在的元素。

  12. data = pd.DataFrame(columns=['电影名称', '导演', '评分']):创建一个空的DataFrame,用于存储电影数据,并指定列名。

  13. i = 0:设置索引变量i。

  14. for item in ddlist::遍历所有电影信息。

  15. titles = item.find_element(By.CLASS_NAME, "board-item-main").find_element(By.CLASS_NAME, "name").text:通过XPath定位电影名称,并使用.text获取文本内容。

  16. directors = item.find_element(By.CLASS_NAME, "star").text:通过XPath定位导演信息,并使用.text获取文本内容。

  17. scores = item.find_element(By.CLASS_NAME, "releasetime").text:通过XPath定位评分信息,并使用.text获取文本内容。

  18. data.loc[i] = [titles, directors, scores]:将电影名称、导演和评分添加到DataFrame中的一行。

  19. i += 1:索引自增1。

  20. print(f"titles{titles}, directors{directors} , scores{scores}"):打印每部电影的名称、导演和评分。

  21. output_path = '猫眼.xlsx':指定输出Excel文件的路径。

  22. data.to_excel(output_path, index=False):将DataFrame保存为Excel文件,不包含索引列。

  23. driver.quit():关闭浏览器。

完结

点赞加关注下个代码有帮助
在这里插入图片描述

好的,以下是使用Scrapy和Selenium爬取猫眼top100详细信息的Python代码: ```python import scrapy from selenium import webdriver from selenium.webdriver.chrome.options import Options from scrapy.selector import Selector from scrapy.http import TextResponse class MaoyanSpider(scrapy.Spider): name = 'maoyan' allowed_domains = ['maoyan.com'] start_urls = ['https://maoyan.com/board/4'] def __init__(self): chrome_options = Options() chrome_options.add_argument('--headless') self.driver = webdriver.Chrome(chrome_options=chrome_options) def parse(self, response): self.driver.get(response.url) response = TextResponse(url=response.url, body=self.driver.page_source, encoding='utf-8') movies = response.xpath('//div[@class="movie-item-info"]') for movie in movies: item = {} item['rank'] = movie.xpath('div[@class="board-index"]/text()').extract_first().strip() item['title'] = movie.xpath('div[@class="movie-item-info"]/p[@class="name"]/a/@title').extract_first().strip() item['star'] = movie.xpath('div[@class="movie-item-info"]/p[@class="star"]/text()').extract_first().strip() item['time'] = movie.xpath('div[@class="movie-item-info"]/p[@class="releasetime"]/text()').extract_first().strip() yield scrapy.Request(url='https://maoyan.com'+movie.xpath('div[@class="movie-item-info"]/p[@class="name"]/a/@href').extract_first(), meta={'item': item}, callback=self.parse_detail) if response.xpath('//a[@class="next"]'): next_page_url = response.xpath('//a[@class="next"]/@href') yield scrapy.Request(url='https://maoyan.com'+next_page_url.extract_first(), callback=self.parse) def parse_detail(self, response): item = response.meta['item'] response = Selector(text=self.driver.page_source) item['type'] = response.xpath('//div[@class="movie-brief-container"]/ul/li[1]/text()').extract() item['length'] = response.xpath('//div[@class="movie-brief-container"]/ul/li[2]/text()').extract() yield item ``` 这个代码利用Scrapy框架和Selenium库实现了猫眼电影top100的爬取,其中使用了Chrome浏览器进行模拟访问。可以直接运行在Python环境下,需要安装Scrapy和Selenium依赖库。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈若城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值