当前位置: 首页 > news >正文

豆瓣电影信息爬虫实战-2024年6月

豆瓣电影信息爬虫教程

摘要

本文将详细介绍如何使用Python编写一个爬虫程序,用于抓取豆瓣电影列表页面上的电影详细信息。通过本教程,你将学习到如何使用requestsPyQuery库来发送HTTP请求、解析HTML内容,并提取所需的数据。

目录

  • 环境搭建
  • 技术栈介绍
  • 爬虫逻辑概述
  • 详细代码解析
  • 运行爬虫
  • 注意事项
  • 结论

环境搭建

在开始之前,请确保你的Python环境已经安装了以下库:

pip install requests pyquery

技术栈介绍

  • Python: 一种易于学习且功能强大的编程语言。
  • Requests: 用于发送HTTP请求的库。
  • PyQuery: 类似于jQuery的库,用于解析HTML文档。
  • re (正则表达式): 用于字符串搜索和匹配。

爬虫逻辑概述

本爬虫的主要任务是从一个给定的豆瓣电影列表页面URL中提取电影的详细信息,包括:

  • 电影标题
  • 导演
  • 主演
  • 类型
  • 制作地区
  • 发行年份
  • 评分数量
  • 每部电影的详细URL

详细代码解析

import requests
from pyquery import PyQuery as pq
import redef doulist_crawler(url):'''联系方式:wx: Wusp1994企鹅号: 812190146此函数爬取豆瓣电影列表页面,并提取列出的电影的详细信息。该函数向指定的豆瓣电影列表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:# 联系方式:# wx: Wusp1994# 企鹅号: 812190146print(f"请求失败,状态码:{response.status_code}")return []  # 如果请求失败,返回空列表if __name__ == "__main__":# 联系方式:# wx: Wusp1994# 企鹅号: 812190146move_list = doulist_crawler('https://www.douban.com/doulist/240962/')print(move_list)

导入库

import requests
from pyquery import PyQuery as pq
import re

定义爬虫函数

def doulist_crawler(url):# 函数定义,接受一个豆瓣电影列表页面的URL

设置请求头

headers = {'User-Agent': '...','Accept': '...'
}

发送GET请求

response = requests.get(url, headers=headers)

检查响应状态

if response.status_code == 200:# 请求成功,继续处理

解析HTML内容

doc = pq(response.text)

提取电影信息

遍历电影列表项,提取每部电影的相关信息:

for item in doulist_item_doc.items():# 提取信息并存储到字典

存储与返回电影信息

doulist.append(item_dict)
return doulist

运行爬虫

要运行爬虫,只需调用doulist_crawler函数,并传入豆瓣电影列表页面的URL:

movies = doulist_crawler('https://www.douban.com/doulist/240962/')
print(movies)

注意事项

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

结论

通过本文,你已经学习了如何使用Python编写一个简单的爬虫来抓取豆瓣电影信息。这是一个实践网络请求和HTML解析的好机会。希望本文对你有所帮助,祝你编程愉快。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《Navi日语社》App:日语学习与翻译的智能助手,支持日文OCR识别提取文字,无需打字对着说话就能翻译的日语语音翻译工具!
  • 华为od-C卷100分题目-3用连续自然数之和来表达整数
  • Word中插入Mathtype右编号,调整公式与编号的位置
  • PHP维吾尔文转换成拉丁文
  • 前端JS必用工具【js-tool-big-box】学习,获取当前浏览器向上滚动还是向下滚动,获取当前距离顶部和底部的距离
  • vue-$set修改深层对象的值
  • 【云原生进阶之数据库技术】第二章-Oracle-原理-4.6.3.7-闪回事务查询技术
  • 我用香橙派做了一个Klipper 3D打印控制器
  • QuanTA: 一种新的高秩高效微调范式
  • 码蹄集部分题目(2024OJ赛18期;并查集+ST表+贪心)
  • GMT shp转gmt数据
  • 618大促有哪些好物是必买的?这些好物你绝对不能错过!
  • HTML静态网页成品作业(HTML+CSS)—— 兰蔻化妆品网页(1个页面)
  • 目前比较好用的LabVIEW架构及其选择
  • 【Neo4j】Windows11使用Neo4j导入CSV数据可视化知识图谱
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • [译]前端离线指南(上)
  • 78. Subsets
  • Angular4 模板式表单用法以及验证
  • ES学习笔记(12)--Symbol
  • JavaScript服务器推送技术之 WebSocket
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • learning koa2.x
  • rabbitmq延迟消息示例
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Yii源码解读-服务定位器(Service Locator)
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 记一次和乔布斯合作最难忘的经历
  • 模型微调
  • 如何用vue打造一个移动端音乐播放器
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 阿里云ACE认证学习知识点梳理
  • 说说我为什么看好Spring Cloud Alibaba
  • ​如何在iOS手机上查看应用日志
  • # 职场生活之道:善于团结
  • ## 1.3.Git命令
  • #数据结构 笔记三
  • (1)(1.13) SiK无线电高级配置(六)
  • (1)STL算法之遍历容器
  • (11)MATLAB PCA+SVM 人脸识别
  • (3)选择元素——(17)练习(Exercises)
  • (LLM) 很笨
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (ZT)一个美国文科博士的YardLife
  • (笔记)M1使用hombrew安装qemu
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (力扣)1314.矩阵区域和
  • (生成器)yield与(迭代器)generator
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (四)React组件、useState、组件样式
  • (四)stm32之通信协议
  • (算法)大数的进制转换
  • (算法)前K大的和
  • (译)2019年前端性能优化清单 — 下篇
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default