动态爬取猫眼每年票房数前100的电影

依次进入每年的票房数页面,自动获取票房数前100的电影的排名,电影名,总票房数和平均票价。

根据元素的定位,可以看到其变化的规律,因此,建立循环,将获得的数据导入到csv文件中。

from selenium import webdriver          
import numpy as np
import time
import pandas as pd
driver = webdriver.Firefox()
driver.get("https://piaofang.maoyan.com/rankings/year")
time.sleep(1)
for i in range(2,13):             #依次进入每一年
    web='//*[@id="tab-year"]/ul/li[{}]'.format(i)
    driver.find_element_by_xpath(web).click()
    time.sleep(1)
    lis=[]
    txt=[]
    for j in range(1,101):
        xpath='//*[@id="ranks-list"]/ul[{}]'.format(j)
        context=driver.find_element_by_xpath(xpath)        #得到相应年的数据
        contexts=context.text
        lis.append(contexts)
        
    for m in lis:
        txt.append(m.split("\n"))

    df= pd.DataFrame(txt, columns=['排名', '电影名', '上映时间','总票房数','平均票价','场均人次'])       
    column=['上映时间','场均人次']
    df = df.drop(columns=column, axis=1)        
    filename='{}年电影票房.csv'.format(2023-i+2)
    df.to_csv(filename, sep=',', header=True, index=False,encoding='utf-8-sig')

结果展示:

 

 

 

### 使用Python爬虫抓取猫眼电影票房据 为了从猫眼电影网站上获取电影票房据,可以采用多种方法和技术栈来实现这一目标。下面将详细介绍一种基于`requests`和`BeautifulSoup`库的方式来进行网页内容解析并提取所需信息。 #### 准备工作 首先安装必要的第三方模块: ```bash pip install requests beautifulsoup4 lxml ``` 接着定义请求头模拟浏览器访问行为以避免被反爬机制阻止: ```python import requests from bs4 import BeautifulSoup 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' } url = "https://maoyan.com/films?showType=3" response = requests.get(url=url, headers=headers) html_content = response.text ``` #### 解析页面结构 利用`BeautifulSoup`对象加载HTML文档,并定位到包含每部影片详情链接的位置。这里假设要收集的信息有:片名、导演、演员阵容以及累计票房等字段。 ```python soup = BeautifulSoup(html_content, 'lxml') films_list = soup.find_all('div', class_='movie-item-info') for film in films_list[:10]: # 只遍历十个作为例子 title_tag = film.select_one('.name a') # 获取电影名字标签 movie_url = f"https://maoyan.com{title_tag['href']}" if title_tag else None detail_response = requests.get(movie_url, headers=headers).text detail_soup = BeautifulSoup(detail_response, 'lxml') try: box_office = detail_soup.find('span', attrs={'class':'stonefont'}).get_text(strip=True) print(f"{title_tag.get_text()} 的累计票房为 {box_office}") except AttributeError as e: print(e) ``` 上述代码片段展示了如何构建HTTP GET 请求发送给服务器端口从而获得响应体中的 HTML 文档;再借助于 `find()` 或者更灵活的选择器语法如 CSS Selector 来精确定位 DOM 节点进而读取出特定属性值或文本节点的内容[^1]。 需要注意的是,在实际操作过程中可能还会遇到其他挑战比如动态加载更多内容的情况,则需要用到像 Selenium 这样的工具去驱动真实的 Web 浏览器实例执行 JavaScript 并等待异步事件完成后才能继续下一步的操作[^5]。 另外值得注意的一点是,当涉及到商业利益相关联的据时,请务必确认自己拥有合法权限后再行动,尊重版权方权益[^2]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值