网络爬虫(实例)

news2024/10/11 14:14:09

(一)显示影片基本信息

访问豆瓣电影Top250(豆瓣电影 Top 250),获取每部电影的中文片名、排名、评分及其对应的链接,按照“排名-中文片名-评分-链接”的格式显示在屏幕上。

(二)存储影片详细信息

访问豆瓣电影Top250(豆瓣电影 Top 250),在问题1的基础上,获取每部电影的导演、编剧、主演、类型、上映时间、片长、评分人数以及剧情简介等信息,并将获取到的信息保存至本地文件中。 

import requests
from bs4 import BeautifulSoup
import json
import time

# 获取单页的电影信息
def get_movies_info_from_page(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
    }
    
    response = requests.get(url, headers=headers)
    if response.status_code != 200:
        print(f"Failed to retrieve data from {url}")
        return []
    
    soup = BeautifulSoup(response.text, 'html.parser')
    movies = soup.find_all('div', class_='item')
    
    movies_info = []
    for movie in movies:
        rank = movie.find('em').get_text()  # 排名
        title = movie.find('span', class_='title').get_text()  # 中文片名
        rating = movie.find('span', class_='rating_num').get_text()  # 评分
        link = movie.find('a')['href']  # 详情链接
        
        # 打印基本信息
        print(f"{rank} - {title} - {rating} - {link}")
        
        # 保存到列表中
        movies_info.append({
            'rank': rank,
            'title': title,
            'rating': rating,
            'link': link
        })
    
    return movies_info

# 获取电影详情页的详细信息
def get_movie_detail(movie):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
    }
    
    response = requests.get(movie['link'], headers=headers)
    if response.status_code != 200:
        print(f"Failed to retrieve details from {movie['link']}")
        return movie
    
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 获取导演、编剧、主演等信息
    info = soup.find('div', id='info')
    if info:
        movie['director'] = info.find('a', rel='v:directedBy').get_text() if info.find('a', rel='v:directedBy') else ''
        movie['scriptwriters'] = ','.join([a.get_text() for a in info.find_all('a', rel=False) if '编剧' in str(a)])  # 编剧信息
        movie['actors'] = ','.join([a.get_text() for a in info.find_all('a', rel='v:starring')])  # 主演
        movie['genre'] = ','.join([a.get_text() for a in info.find_all('span', property='v:genre')])  # 类型
        movie['release_date'] = info.find('span', property='v:initialReleaseDate').get_text() if info.find('span', property='v:initialReleaseDate') else ''  # 上映时间
        movie['duration'] = info.find('span', property='v:runtime').get_text() if info.find('span', property='v:runtime') else ''  # 片长
        movie['votes'] = soup.find('span', property='v:votes').get_text() if soup.find('span', property='v:votes') else ''  # 评分人数
        movie['summary'] = soup.find('span', property='v:summary').get_text().strip() if soup.find('span', property='v:summary') else ''  # 剧情简介
    
    return movie

# 爬取所有Top 250的电影信息
def scrape_douban_top_250():
    base_url = 'https://movie.douban.com/top250?start='
    all_movies = []
    
    for i in range(0, 250, 25):
        url = base_url + str(i)
        movies_info = get_movies_info_from_page(url)
        
        # 获取每部电影的详细信息
        for movie in movies_info:
            movie_detail = get_movie_detail(movie)
            all_movies.append(movie_detail)
        
        # 为了防止被网站封禁,添加一些延时
        time.sleep(2)
    
    # 保存到本地文件
    with open('douban_top_250_movies.json', 'w', encoding='utf-8') as f:
        json.dump(all_movies, f, ensure_ascii=False, indent=4)

# 运行爬虫
scrape_douban_top_250()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2205003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

生成对抗网络GAN——学习笔记

经过大量阅读资料和博客,对GAN的认识和学习做一个记录。个人粗浅的认识,不管是什么模型都离不开最基础的神经网络。主要借鉴的博客内容如下 新型的神经网络模型,从CNN到BERT都有介绍。_最新的神经网络模型-CSDN博客 生成对抗网络——GAN&am…

Open WebUI | 自托管的类 ChatGPT 网站

Open WebUI 是一个扩展性强、功能丰富且用户友好的自托管 WebUI,支持 ChatGPT 网页端的大部分功能,支持各类模型服务,包括 Ollama 和 OpenAI 的 API。该项目在 GitHub 上已有 38k 星,非常受欢迎。 功能介绍 本篇介绍该项目的功能…

(Kafka源码五)Kafka服务端处理消息

Kafka 服务端(Broker)采用 Reactor 的架构思想,通过1 个 Acceptor,N 个 Processor(N默认为3),M 个 KafkaRequestHandler(M默认为8),来处理客户端请求,这种模式结合了多线…

眼镜店会员积分卡系统软件试用版下载 佳易王配镜顾客信息管理系统使用操作教程

一、前言 【软件试用版资源文件下载可以点文章最后卡片了解】 眼镜店会员积分软件是专门为眼镜店设计的管理工具,旨在通过积分活动提升顾客的忠诚度,促进复购率,并优化顾客体验。 眼镜店会员积分卡系统软件试用版下载 佳易王配镜顾客信息管…

WEB攻防-python考点CTF与CMS-SSTI模板注入PYC反编译

知识点: 1、PYC(python编译后的文件)文件反编译; 2、Python-Web-SSTI; 3、SSTI模板注入利用分析; (Server-Side Template Injection) SSTI 就是服务器端模板注入 当前使用的一…

高级算法设计与分析-MaxFlow网络流基础知识

MaxFlow网络流 1 网络流基础概念 source:源点 sink:终点 Flow:流量 capacity:容量 Residual:残量 Residual Network:残量网络 Augmenting path:增广路径,表示从源点 s 到终点 t 不包含环的路径 Bottleneck capacity:瓶颈容量 2 最大流 2.1 基础概念 2.2 增广路算法 …

C++刷怪笼(7)string类

目录 1.前言 2.正文 2.1标准库中的string类 2.1.1string类 2.1.2auto和范围for 2.1.3string类的常用接口说明 2.2string类的模拟实现 2.2.1经典的string类问题 2.2.2浅拷贝 2.2.3深拷贝 ​编辑 2.2.4写时拷贝 3.小结 1.前言 前面我们对C的封装这一大特性进行了详细…

Win10电脑录屏全攻略:轻松掌握屏幕录制技巧

在日常生活和工作中,我们经常需要录制屏幕来展示操作步骤、制作教程视频或记录重要内容。如果你正在使用Win10系统,那么有多种方法可以轻松实现屏幕录制。下面就给大家分享五种不同的录屏工具,让你轻松掌握屏幕录制技巧。 一、嗨格式录屏大师…

从数据到资产,数据资产管理的风口能撑多久?

从数据到资产,数据资产管理的风口能撑多久? 前言从数据到资产 前言 在今天的大数据和人工智能世界里,数据的价值已被推到了前所未有的高度。作为一家企业,如何有效管理这些数据并从中提取出最具价值的部分,成了各行各…

AI产品经理指南| 面试了100位AI产品经理后的心得总结

AI正深刻地变革着各行各业,而在这场技术革命中,首先受到影响的或许正是那些与AI紧密相连的专业人士——产品经理。 我们本篇中的对话始于Vanessa对「面试了100位AI产品经理」的心得总结。 👩🏻 Vanessa: 字节跳动AI产…

NTAG_8654

NTAG_8654 产品型号 NTAG_8654 标签尺寸 85.5*54*4.3MM 芯片类型 NFC Ntag 213/215/216 工作频率 13.56MHZ 工作温度 -30C~100C 标签材质 ABS 支持协议 14443A 协议 标签材质 黑/白 安装方式 背胶粘贴或柳钉安装 应用领域 物业巡更,设备巡检&…

工业智能化的安全护盾,CodeMeter如何实现高效授权与防护

工业自动化的快速发展对技术创新提出了越来越高的要求。为了在全球竞争中保持领先,制造企业不仅需要提高生产效率,还必须确保软件的安全性和可靠性。如何在保证高效运营的同时,保护核心知识产权和防止软件盗用,成为了行业内的重要…

拓扑排序基础及应用案例

文章目录 基础内容应用案例:软件构建系统的依赖管理背景描述解决方案具体步骤示例代码 基础内容 拓扑排序(Topological Sort)是一种针对有向无环图(Directed Acyclic Graphs, DAG)的排序方法。它的目的是找出一种图中…

【树莓派5B】IO串口通信使用

超级简单的串口使用 前言零、检查准备(可略)0.1 查看UART引脚:0.2 扩展一下引脚查看的方法 一、配置准备1.1 检查端口配置1.2 查看串口映射1.3 下载minicom串口调试工具1.4 通过命令获取串口上的数据 二、python的serial进行收发测试总结 前言…

Llama-3.2-3B-Instruct PyTorch模型微调最佳实践

1 引言 Meta Llama 3.2多语言大型语言模型集合(LM)是一个1B和3B大小(文本输入/文本输出)的预训练和指令微调模型集合。Llama 3.2指令调整的纯文本模型针对多语言对话用例进行了优化,包括智能检索和总结任务。它们在常…

【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系

看到这句话的时候证明:此刻你我都在努力 加油陌生人 个人主页:Gu Gu Study 专栏:用Java学习数据结构系列 喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff…

js逆向——2024最新有道翻译过控制台反调试

今日受害者网址:https://fanyi.youdao.com/ 最近收到粉丝反馈,有道翻译网站添加了反调试功能,出现了打不开控制台的情况 那么,今天就加餐讲一下如何过掉有道的反调试吧~ 我进去测试了一下,发现就是右键检查/f12打开控…

Java-基础

1. 导入模块不能纯粹的复制粘贴,要从new里导入,因为前者建立不了关联 2. 数组 String[] name{"张三","李四","王五"};int[] numsnew int[]{1,2,3};//二维String[][] names{{"张三","李四"},{"…

算法设计课程简介

算法设计课程简介 1. 课程概述 算法设计是一门计算机科学的核心课程,旨在教授学生如何设计、分析和优化各种算法,以解决实际问题。该课程不仅涉及具体算法的实现,更注重算法在时间复杂度和空间复杂度上的优化,帮助学生培养编写高…

map系列的使用

map和multimap参考文档 map和multimap参考文档https://legacy.cplusplus.com/reference/map/ map类的介绍 map的声明如下&#xff0c;Key就是map底层关键字的类型&#xff0c;T是map底层T的类型。但要注意&#xff1a;map的 key 与 T 是封装在std::pair<Key&#xff0c;…