python_猫眼实例

本文介绍了一个使用Python实现的猫眼电影榜单爬虫程序,该程序利用requests库获取网页内容,并采用正则表达式解析电影信息,最终将数据保存为HTML格式。通过多进程并行处理,提高了数据抓取效率。

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

import requests
from requests.exceptions import RequestException
from multiprocessing.dummy import Pool
import re

def get_one_page(url):
    try:
        r = requests.get(url)
        if r.status_code == 200:
            return r.text
        return None
    except RequestException:
        return None
def parser_one_page(html):
    pattern = re.compile("<dd>.*?>(\d+)</i>.*?data-src=\"(.*?)\".*?name\">.*?>(.*?)"
                         "<.*?</p>.*?star\">(.*?)"
                         "</p>.*?releasetime\">(.*?)"
                         "</p>.*?integer\">(.*?)</i>.*?fraction\">(.*?)</i>",re.S)

    links = re.findall(pattern,html)
    for link in links:
        yield {
            'index':link[0],
            'image':link[1],
            'title':link[2],
            'actor':link[3].strip(),
            'time':link[4].strip(),
            'score':link[5]+link[6]
        }
def main(page_num):
    url='https://maoyan.com/board/4?offset='+str(page_num)
    html = get_one_page(url)
    links = parser_one_page(html)

    with open("maoyan.html",'a',encoding="utf-8") as f:
        f.write('<html>')
        f.write('<head><meta charset="UTF-8"></head>')
        f.write('<body>')
        f.write('<table>')
        for link in links:
            f.write("<tr>")
            f.write("<td>%s</td>" % link['index'])
            f.write("<td>%s</td>" % link['actor'])
            f.write("<td>%s</td>" % link['title'])
            f.write("<td><img src=\"%s\"></td>" % link['image'])
            f.write("<td>%s</td>" % link['time'])
            f.write("<td>%s</td>" % link['score'])
            f.write("</tr>")
        f.write('</table>')
        f.write('</body>')
        f.write('</html>')
if __name__ == '__main__':
    pool=Pool()
    pool.map(main,[i*10 for i in range(10)])


### Python 爬虫抓取猫眼电影数据并进行可视化 #### 使用Selenium实现自动化浏览器操作 为了简化网页解析过程,推荐采用 Selenium 工具库来代替传统的 requests 和 正则表达式的组合方式。Selenium 提供了一个强大的接口用于模拟真实用户的浏览器行为,能够轻松处理动态加载的内容。 安装依赖包: ```bash pip install selenium pandas matplotlib seaborn ``` 创建 WebDriver 实例连接 Chrome 浏览器: ```python from selenium import webdriver driver = webdriver.Chrome() url = 'https://maoyan.com/board/4' driver.get(url) ``` 定位页面元素提取所需信息: ```python movies = [] for item in driver.find_elements_by_css_selector('.board-wrapper dd'): rank = item.find_element_by_class_name('board-index').text name = item.find_element_by_class_name('name').text star = item.find_element_by_class_name('star').text.strip().split()[0][3:] releasetime = item.find_element_by_class_name('releasetime').text[5:] movies.append({ "rank": int(rank), "title": str(name), "actor": str(star), "time": str(releasetime) }) ``` 关闭浏览器实例释放资源: ```python driver.quit() ``` #### 数据存储与预处理 将收集到的信息保存至 Pandas DataFrame 中以便后续分析: ```python import pandas as pd df_movies = pd.DataFrame(movies) print(df_movies.head()) ``` #### 进行简单数据分析及可视化展示 利用 Matplotlib 和 Seaborn 库绘制柱状图比较不同演员参演作品数量差异: ```python import matplotlib.pyplot as plt import seaborn as sns plt.figure(figsize=(10,8)) sns.countplot(y='actor', data=df_movies, order=pd.value_counts(df_movies['actor']).iloc[:10].index) plt.title('Top 10 Actors by Number of Movies') plt.show() ``` [^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值