豆瓣电影信息爬虫【2024年6月】教程

豆瓣电影信息爬虫【2024年6月】教程,赋完整代码

在本教程中,我们将使用以下技术栈来构建一个爬虫,用于爬取豆瓣电影列表页面的信息:

完整代码放到最后 ; 完整代码放到最后 ; 完整代码放到最后 ; 重要的事情说三遍。

1. 技术栈介绍

在本教程中,我们将使用以下技术栈来构建一个爬虫,用于爬取豆瓣电影列表页面的信息:

  • Python: 一种广泛使用的高级编程语言,因其简洁的语法和强大的库支持而受到开发者的喜爱。
  • Requests: 一个简单易用的HTTP库,用于发送各种HTTP请求。
  • PyQuery: 一个使Python像jQuery一样解析HTML文档的库。
  • 正则表达式 (re模块): Python内置的正则表达式库,用于字符串搜索和替换。

2. 环境搭建

在开始编写爬虫之前,需要确保你的开发环境中安装了Python以及上述提到的库。可以通过以下命令安装所需的库:

pip install requests pyquery

3. 代码逻辑概述

本爬虫的主要任务是从一个给定的豆瓣电影列表页面URL中提取电影的详细信息。以下是代码的主要逻辑流程:

  1. 发送HTTP请求:使用requests库向豆瓣电影列表页面发送GET请求。
  2. 检查响应状态:确保请求成功,即HTTP状态码为200。
  3. 解析HTML内容:使用PyQuery解析返回的HTML文档。
  4. 提取电影信息:遍历页面中的电影列表项,提取每部电影的相关信息。
  5. 数据存储与输出:将每部电影的信息存储在字典中,并添加到列表中,最后返回这个列表。

4. 详细代码解析

4.1 导入库
import requests
from pyquery import PyQuery as pq
import re

这里导入了所需的库,requests用于网络请求,PyQuery用于HTML解析,re用于正则表达式匹配。

4.2 定义爬虫函数
def doulist_crawler(url):# ...

定义了一个名为doulist_crawler的函数,它接受一个参数url,即豆瓣电影列表的URL。

4.3 设置请求头
headers = {'User-Agent': '...','Accept': '...'
}

设置请求头,模拟浏览器访问,避免被服务器识别为爬虫。

4.4 发送GET请求
response = requests.get(url, headers=headers)

使用requests.get函数发送GET请求到指定的URL,并携带之前设置的请求头。

4.5 检查响应状态
if response.status_code == 200:# ...

检查HTTP响应状态码,如果为200,表示请求成功,继续执行;否则打印错误信息并返回空列表。

4.6 解析HTML内容
doc = pq(response.text)

使用PyQuery解析服务器返回的HTML内容。

4.7 提取电影信息
doulist_item_doc = doc(".doulist-item")
doulist = []
for item in doulist_item_doc.items():# ...

遍历页面中所有电影列表项(.doulist-item),并对每一项进行信息提取。

4.8 存储与返回电影信息
item_dict = {# ...
}
doulist.append(item_dict)

将每部电影的信息存储在一个字典中,然后将该字典添加到列表doulist中。

5. 运行爬虫和完整代码

最后,调用doulist_crawler函数,并传入豆瓣电影列表页面的URL,就可以得到一个包含所有电影信息的列表。

import requests
from pyquery import PyQuery as pq
import redef doulist_crawler(url):'''此函数爬取豆瓣电影列表页面,并提取列出的电影的详细信息。该函数向指定的豆瓣电影列表URL发送GET请求,并使用预定义的头部信息来模拟浏览器请求。如果请求成功,它将使用PyQuery解析HTML内容,并提取电影的详细信息,如标题、导演、主演、类型、地区、年份、评分和评分数量。每部电影的信息存储在一个字典中,并添加到名为'doulist'的列表中。然后打印出详细信息。提取的数据包括:- 电影标题- 导演- 主演- 类型- 制作地区- 发行年份- 评分数量- 每部电影的详细URL参数:url (str): 要爬取的豆瓣-豆列的电影列表页面的URL。https://www.douban.com/doulist/240962/返回:list: 包含每部电影详细信息的字典组成的列表。:return:'''# 定义请求头headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',# 其他需要的请求头...}# 发送 GET 请求并获取响应内容response = requests.get(url, headers=headers)# 确保请求成功if response.status_code == 200:# 使用 PyQuery 解析网页内容doc = pq(response.text)doulist_item_doc = doc(".doulist-item")doulist = []for item in doulist_item_doc.items():item_dict = {}# 初始化变量director = Nonestarring = Nonegenre = Noneregion = Noneyear = Nonedetail_url = item(".title a").attr("href")title = item(".title a").text()rating_nums = item(".rating_nums").text()rating_count_text = item('.rating span:contains("人评价")').text()rating_count = int(re.search(r'\d+', rating_count_text).group(0))lines = item('div.abstract').text().split('\n')for line in lines:if '导演' in line:director = line.split('导演:')[-1].strip()elif '主演' in line:starring = line.split('主演:')[-1].strip()elif '类型' in line:genre = line.split('类型:')[-1].strip()elif '制片国家/地区' in line:region = line.split('制片国家/地区:')[-1].strip()elif '年份' in line:year = line.split('年份:')[-1].strip()item_dict['director'] = directoritem_dict['starring'] = starringitem_dict['genre'] = genreitem_dict['region'] = regionitem_dict['year'] = yearitem_dict['detail_url'] = detail_urlitem_dict['title'] = titleitem_dict['rating_count'] = rating_countdoulist.append(item_dict)return doulist  # 返回电影列表else:print(f"请求失败,状态码:{response.status_code}")return []  # 如果请求失败,返回空列表if __name__ == "__main__":move_list = doulist_crawler('https://www.douban.com/doulist/240962/')print(move_list)

6. 注意事项

  • 确保遵守豆瓣的使用条款,不要过度请求。
  • 考虑到网站的反爬虫机制,可能需要定期更新请求头或使用代理。
  • 爬取的数据应仅用于个人学习和研究,不得用于商业用途。

通过本教程,你应该能够理解并运行这个豆瓣电影信息爬虫。如果有任何问题,欢迎随时提问。

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

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

相关文章

在AWS上运行的EKS Elastic Kubernetes Service 创建集群Cluster,Node group, Nodes

1. 前提条件 AWS Account: https://aws.amazon.com/free/Installing KubeCtl CLI https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.htmlEKS Cluster RoleIAM Role for Node GroupVPCEC2 Key Pair which can be used to SSH to the worker nodesAWS …

【ppyoloe+】19届智能车完全模型组非官方基线

基于十九届智能车百度完全模型组线上赛baseline修改 调整参数最高能到0.989吧 一、环境准备 1.安装PaddleDetection In [1] # 解压PaddleDetection压缩包 %cd /home/aistudio/data/data267567 !unzip -q PaddleDetection-release-2.6.zip -d /home/aistudio /home/aistud…

【教程】从0开始搭建大语言模型:实现Attention机制

从0开始搭建大语言模型 从0开始搭建大语言模型:实现Attention机制建模长序列存在的问题使用attention机制获得数据间的依赖Self-attention介绍带有可训练权重的self-attention1.生成Q,K,V变量2.计算attention score3.attention weight的获得4…

支付交易——在线支付系统基本概念

摘要 本文聚集于实战,只讲解最实用的知识点,至于支付起源、在线支付发展历程等科普知识,感兴趣的读者可参考其它优秀的支付类书籍或网络上其它优秀的文章。本章内容对大部分专业概念进行了极致简化,以便更好地帮助读者入门。实际…

mysql之数据聚合

官方文档 SUM(column) 用于计算指定列的总和。 示例:计算每个部门员工的总工资 SELECT department, SUM(salary) AS total_salary FROM employees GROUP BY department;AVG(column) 用于计算指定列的平均值。 示例:计算每个部门员工的平均工资 SELECT department, AVG(sal…

鸿蒙轻内核M核源码分析系列二十 Newlib C

LiteOS-M内核LibC实现有2种,可以根据需求进行二选一,分别是musl libC和newlibc。本文先学习下Newlib C的实现代码。文中所涉及的源码,均可以在开源站点https://gitee.com/openharmony/kernel_liteos_m 获取。 使用Musl C库的时候&#xff0c…

具有可编程电流限制的1.5A电源开关LPW5210用于5V或USB供电输出过流保护只要3毛

前言 适合要求反应时间较快的保护电路,保险丝或自恢复保险丝也能起到保护作用,但断开电流是额定电流的一倍,过流较小时,甚至需要数秒或更长的时间才能保护,因此半导体的过流保护开关更合适,相对成本要高一…

Synchronized的“特性保证”

1. 互斥性(Mutual Exclusion) 定义:synchronized确保了同一时刻只有一个线程可以执行被其修饰的代码块或方法,即多个线程在访问共享资源时不会发生冲突。源码分析:在JVM中,synchronized的实现依赖于Java对象头中的Mark Word和Monitor对象。当一个线程尝试进入synchronize…

replaceAll is not a function 详解

先说说原因: 在chrome 浏览器中使用 replaceAll 报这个错误,是因为chrome 版本过低, 在chrome 85 以上版本才支持 用法 replaceAll(pattern, replacement)const paragraph "I think Ruths dog is cuter than your dog!"; console…

数据可视化后起之秀——pyecharts

题目一:绘制折线图,展示商家A与商家B各类饮品的销售额 题目描述: 编写程序。根据第9.3.1,绘制折线图,展示商家A与商家B各类饮品的销售额。 运行代码: #绘制折线图,展示商家A与商家B各类饮品的…

淘宝数据抓取的全景解析

——分析淘宝数据抓取的常见方法及其适用场景,探讨不同技术如何影响数据的质量和可用性 在当今数据驱动的电子商务时代,能够有效地抓取和利用数据成为商家获得竞争优势的关键。淘宝作为中国最大的在线零售平台,其海量数据具有极高的价值&…

Spring--Bean的作用域,生命周期

Bean的作用域 Bean的作用域有很多种,在Spring Framework中支持6种(其中有四种只有在web环境中才能生效),同时Spring还支持自定义Bean的范围。 Spring Framework中支持的6种范围: 作用域解释singleton每个Spring IoC…

优化MySQL连接管理:深入解析max_connections参数与解决Too Many Connections策略

前言 ​ 在现代的数据库管理中,合理配置max_connections参数对于确保MySQL数据库的稳定性和高效性至关重要。本文将深入探讨max_connections的基本概念,分析导致“Too many connections”错误的常见原因,并提供一系列解决方案,以…

QStack、QQueue 先进后出 先进先出 用法

实验QStack的先进后出和 QQueue 的先进先出 QStack、QQueue #include <QCoreApplication> #include <QDebug> #include <QStack> #include <QQueue>//栈的使用 后进先出void QStackPrint(){QStack<int> stack;stack.push(10);stack.push(20);st…

从零到一建设数据中台(番外篇)- 数据中台UI欣赏

番外篇 - 数据中台 UI 欣赏 话不多说,直接上图。

想让谷歌独立站关键词排名一飞冲天?这个秘密技巧必须知道!

在激烈的谷歌排名竞争中&#xff0c;我们要确保自己优化的独立站在谷歌搜索结果中占据首页位置至关重要。排名首页不仅能显著提高展现和流量&#xff0c;还能带来更多潜在客户和业务机会。本文将从谷歌SEO技术的角度&#xff0c;深入探讨在谷歌独立站关键词排名首页最重要的几个…

ShardingSphere跨表查询报错

目录 一、场景简介二、报错信息三、SQL四、原因五、解决方法一、调整SQL&#xff0c;不使用子查询方法二、将子查询的SQL独立出来&#xff0c;后续连接逻辑由代码处理 一、场景简介 1、使用ShardingSphere按月份进行分表 2、单月查询正常&#xff08;单表&#xff09; 3、跨…

CA证书及PKI

文章目录 概述非对称加密User Case: 数据加密User Case: 签名验证潜在问题 CACA证书的组成CA签发证书流程CA验证签名流程CA吊销证书流程 PKI信任链证书链 概述 首先我们需要简单对证书有一个基本的概念&#xff0c;以几个问题进入了解 ❓ Question1: 什么是证书&#xff1f; 证…

福利|免费申请长期单域名、通配符、多域名SSL证书,不限量

一、什么是单域名、通配符、多域名SSL证书 单域名证书&#xff1a;仅保护一个特定的域名。 通配符证书&#xff1a;保护一个主域名及其所有二级子域名。 多域名证书&#xff1a;在同一张证书中保护多个不同的域名&#xff0c;可以是主域名也可以是子域名&#xff0c;域名之间…

目前比较好用的LabVIEW架构及其选择

LabVIEW提供了多种架构供开发者选择&#xff0c;以满足不同类型项目的需求。选择合适的架构不仅可以提高开发效率&#xff0c;还能确保项目的稳定性和可维护性。本文将介绍几种常用的LabVIEW架构&#xff0c;并根据不同项目需求和个人习惯提供选择建议。 常用LabVIEW架构 1. …