Python爬虫实战:爬取豆瓣电影

目录

引言

1. 爬虫基础

1.1 什么是爬虫?

1.2 Python爬虫常用库

2. 实战:抓取豆瓣电影Top250

2.1 安装依赖库

2.2 发送HTTP请求

​编辑

2.3 解析HTML

​编辑

2.4 存储数据

2.5 完整代码

3. 进阶:处理分页和动态内容

3.1 抓取多页数据

3.2 处理动态内容

4. 反爬虫策略与应对

4.1 常见的反爬虫策略

4.2 应对策略

5. 总结


引言

在当今大数据时代,网络爬虫(Web Crawler)成为了获取互联网数据的重要工具。无论是数据分析、机器学习还是市场调研,爬虫技术都能帮助我们快速获取所需的数据。本文将带你从零开始,使用Python编写一个简单的网络爬虫,并逐步扩展到更复杂的应用场景。

1. 爬虫基础

1.1 什么是爬虫?

网络爬虫是一种自动化程序,能够从互联网上抓取数据。它通过模拟浏览器请求,访问网页并提取所需的信息。爬虫的核心任务包括:

  • 发送HTTP请求:向目标网站发送请求,获取网页内容。

  • 解析HTML:从网页中提取有用的数据。

  • 存储数据:将提取的数据保存到本地或数据库中。

1.2 Python爬虫常用库

Python拥有丰富的库来支持爬虫开发,以下是常用的几个库:

  • Requests:用于发送HTTP请求,获取网页内容。

  • BeautifulSoup:用于解析HTML,提取数据。

  • Scrapy:一个强大的爬虫框架,适合大规模数据抓取。

  • Selenium:用于处理动态网页,模拟浏览器操作。

2. 实战:抓取豆瓣电影Top250

将以抓取豆瓣电影Top250为例,演示如何使用Python编写一个简单的爬虫。

2.1 安装依赖库

首先,确保你已经安装了requestsBeautifulSoup库。如果没有安装,可以使用以下命令进行安装:

pip install requests beautifulsoup4

2.2 发送HTTP请求

我们使用requests库向豆瓣电影Top250页面发送请求,获取网页内容。

import requestsurl = "https://movie.douban.com/top250"
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"
}response = requests.get(url, headers=headers)
if response.status_code == 200:print("请求成功!")html_content = response.text
else:print("请求失败,状态码:", response.status_code)

2.3 解析HTML

使用BeautifulSoup解析HTML,提取电影名称、评分等信息。

from bs4 import BeautifulSoupsoup = BeautifulSoup(html_content, "html.parser")movies = soup.find_all("div", class_="info")for movie in movies:title = movie.find("span", class_="title").textrating = movie.find("span", class_="rating_num").textprint(f"电影名称:{title},评分:{rating}")

2.4 存储数据

将提取的数据保存到CSV文件中。

import csvwith open("douban_top250.csv", mode="w", newline="", encoding="utf-8") as file:writer = csv.writer(file)writer.writerow(["电影名称", "评分"])for movie in movies:title = movie.find("span", class_="title").textrating = movie.find("span", class_="rating_num").textwriter.writerow([title, rating])

2.5 完整代码

import requests
from bs4 import BeautifulSoup
import csvurl = "https://movie.douban.com/top250"
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"
}response = requests.get(url, headers=headers)
if response.status_code == 200:html_content = response.text
else:print("请求失败,状态码:", response.status_code)exit()soup = BeautifulSoup(html_content, "html.parser")
movies = soup.find_all("div", class_="info")with open("douban_top250.csv", mode="w", newline="", encoding="utf-8") as file:writer = csv.writer(file)writer.writerow(["电影名称", "评分"])for movie in movies:title = movie.find("span", class_="title").textrating = movie.find("span", class_="rating_num").textwriter.writerow([title, rating])print("数据已保存到douban_top250.csv")

3. 进阶:处理分页和动态内容

3.1 抓取多页数据

豆瓣电影Top250有10页数据,我们需要遍历所有页面进行抓取。

base_url = "https://movie.douban.com/top250"
all_movies = []for page in range(0, 250, 25):url = f"{base_url}?start={page}"response = requests.get(url, headers=headers)if response.status_code == 200:soup = BeautifulSoup(response.text, "html.parser")movies = soup.find_all("div", class_="info")for movie in movies:title = movie.find("span", class_="title").textrating = movie.find("span", class_="rating_num").textall_movies.append([title, rating])else:print(f"第{page//25 + 1}页请求失败,状态码:", response.status_code)with open("douban_top250_all.csv", mode="w", newline="", encoding="utf-8") as file:writer = csv.writer(file)writer.writerow(["电影名称", "评分"])writer.writerows(all_movies)print("所有数据已保存到douban_top250_all.csv")

3.2 处理动态内容

如果网页内容是通过JavaScript动态加载的,可以使用Selenium模拟浏览器操作。

from selenium import webdriver
from selenium.webdriver.common.by import By
import timedriver = webdriver.Chrome()
driver.get("https://movie.douban.com/top250")movies = driver.find_elements(By.CLASS_NAME, "info")
for movie in movies:title = movie.find_element(By.CLASS_NAME, "title").textrating = movie.find_element(By.CLASS_NAME, "rating_num").textprint(f"电影名称:{title},评分:{rating}")driver.quit()

4. 反爬虫策略与应对

4.1 常见的反爬虫策略

  • User-Agent检测:服务器通过检查请求头中的User-Agent来判断是否为爬虫。

  • IP封禁:频繁请求可能导致IP被封禁。

  • 验证码:某些网站会要求输入验证码。

4.2 应对策略

  • 设置合理的请求头:模拟浏览器请求,设置User-Agent

  • 使用代理IP:通过代理IP池避免IP被封禁。

  • 降低请求频率:使用time.sleep()控制请求间隔。

5. 总结

本文通过一个简单的豆瓣电影Top250爬虫实例,介绍了Python爬虫的基本流程。我们从发送HTTP请求、解析HTML到存储数据,逐步实现了一个完整的爬虫程序。此外,我们还探讨了如何处理分页和动态内容,以及应对常见的反爬虫策略。

爬虫技术虽然强大,但在使用时务必遵守相关法律法规和网站的使用条款,避免对目标网站造成不必要的负担。


参考资料

  • Requests官方文档

  • BeautifulSoup官方文档

  • Selenium官方文档

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

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

相关文章

Redis7——基础篇(六)

前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 基础篇: Redis(一)Redis(二)Redis(三)Redis&#x…

Windows 下 Ollama 安装deepseek本地模型

Windows 下 Ollama 安装deepseek本地模型 安装 Ollama 下载 Ollama 下载链接:https://ollama.org.cn/download/windows 下载完成后,按照提示进行安装。 安装过程 安装完成后,安装页面会自动关闭,这是正常现象。 接下来&#…

【鸿蒙开发】第四十三章 Notification Kit(用户通知服务)

目录​​​​​​​ 1 简介 1.1 使用场景 1.2 能力范围 1.3 业务流程 1.4 通知样式 1.5 约束限制 1.6 与相关Kit的关系 2 请求通知授权 2.1 接口说明 2.2 开发步骤 3 管理通知角标 3.1 接口说明 3.2 开发步骤 4 管理通知渠道 4.1 通知渠道类型说明 4.2 接口说明…

bboss v7.3.5来袭!新增异地灾备机制和Kerberos认证机制,助力企业数据安全

ETL & 流批一体化框架 bboss v7.3.5 发布,多源输出插件增加为特定输出插件设置记录过滤功能;Elasticsearch 客户端新增异地双中心灾备机制,提升框架高可用性;Elasticsearch client 和 http 微服务框架增加对 Kerberos 认证支持…

利用非球面透镜进行激光光束重组

这是高斯分布激光束重塑透镜设计的分步演示。该透镜用于将高斯分布转换为成像平面上的均匀照明。 输入激光光束轮廓: 光学结构: Excel 中坐标的数学计算: 输出照度曲线:

(一)趣学设计模式 之 单例模式!

目录 一、啥是单例模式?二、为什么要用单例模式?三、单例模式怎么实现?1. 饿汉式:先下手为强! 😈2. 懒汉式:用的时候再创建! 😴3. 枚举:最简单最安全的单例&a…

nacos编写瀚高数据库插件

1、下载nacos源码 git clone gitgithub.com:alibaba/nacos.git 2、引入瀚高驱动 <dependency><groupId>com.highgo</groupId><artifactId>jdbc</artifactId><version>${highgo.version}</version></dependency> 3、DataSource…

讯飞唤醒+VOSK语音识别+DEEPSEEK大模型+讯飞离线合成实现纯离线大模型智能语音问答。

在信息爆炸的时代&#xff0c;智能语音问答系统正以前所未有的速度融入我们的日常生活。然而&#xff0c;随着数据泄露事件的频发&#xff0c;用户对于隐私保护的需求日益增强。想象一下&#xff0c;一个无需联网、即可响应你所有问题的智能助手——这就是纯离线大模型智能语音…

后端Java Stream数据流的使用=>代替for循环

API讲解 对比 示例代码对比 for循环遍历 package cn.ryanfan.platformback.service.impl;import cn.ryanfan.platformback.entity.Algorithm; import cn.ryanfan.platformback.entity.AlgorithmCategory; import cn.ryanfan.platformback.entity.DTO.AlgorithmInfoDTO; im…

UE 播放视频

一.UI播放视频 1.导入视频文件至工程文件夹 2.文件夹内右健选择Media -> File Meida Source创建testFileMeidaSource文件。 编辑FilePath为当前视频 3.右键->Media->Media Player 创建testMediaPlayer文件 4.右键创建testMediaTexture。编辑MediaPlayer设置testMedia…

推荐一款AI大模型托管平台-OpenWebUI

推荐一款AI大模型托管平台-OpenWebUI 1. OpenWebUI 1. OpenWebUI什么? 官网地址&#xff1a;https://openwebui.com/ GitHub地址&#xff1a; https://github.com/open-webui/open-webui Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台&#xff0c;旨在完全离…

【Python项目】基于知识图谱的百科问答系统

【Python项目】基于知识图谱的百科问答系统 技术简介&#xff1a; 采用Python技术、MySQL数据库、Django框架、Scrapy爬虫等技术实现。 系统简介&#xff1a; 百科问答系统是一个基于知识图谱的问答平台&#xff0c;旨在为用户提供快速、准确的百科知识查询服务。系统通过爬…

stm32rtc实时时钟详解文章

目录 stm32 后备区域基础知识详解 stm32 bkp基础知识详解 Unix时间戳基础知识详解 stm32 rtc实时时钟基础知识详解 相关代码初始化配置 欢迎指正&#xff0c;希望对你&#xff0c;有所帮助&#xff01;&#xff01;&#xff01; stm32 后备区域基础知识详解 stm32芯片的 …

Spring Boot项目@Cacheable注解的使用

Cacheable 是 Spring 框架中用于缓存的注解之一&#xff0c;它可以帮助你轻松地将方法的结果缓存起来&#xff0c;从而提高应用的性能。下面详细介绍如何使用 Cacheable 注解以及相关的配置和注意事项。 1. 基本用法 1.1 添加依赖 首先&#xff0c;确保你的项目中包含了 Spr…

windows上vscode cmake工程搭建

安装vscode插件&#xff1a; 1.按装fastc&#xff08;主要是安装MinGW\mingw64比较方便&#xff09; 2.安装C&#xff0c;cmake&#xff0c;cmake tools插件 3.准备工作完成之后&#xff0c;按F1&#xff0c;选择cmake:Quick Start就可以创建一个cmake工程。 4.设置Cmake: G…

SpringMVC详解

文章目录 1 什么是MVC 1.1 MVC设计思想1.2 Spring MVC 2 SpringMVC快速入门3 SpringMVC处理请求 3.1 请求分类及处理方式 3.1.1 静态请求3.1.2 动态请求 3.2 处理静态请求 3.2.1 处理html文件请求3.2.2 处理图片等请求 3.3 处理动态请求 3.3.1 注解说明3.3.2 示例 3.4 常见问题…

【用deepseek和chatgpt做算法竞赛】——还得DeepSeek来 -Minimum Cost Trees_5

往期 【用deepseek和chatgpt做算法竞赛】——华为算法精英实战营第十九期-Minimum Cost Trees_0&#xff1a;介绍了题目和背景【用deepseek和chatgpt做算法竞赛】——华为算法精英实战营第十九期-Minimum Cost Trees_1&#xff1a;题目输入的格式说明&#xff0c;选择了邻接表…

面试题汇总

1. 判断大小端问题 大端&#xff1a;低字节存放在高地址&#xff1b; 小端&#xff1a;低字节存放在低地址 如 : 0x12345678 bool is_little_endian() {unsigned int x 1;return ((char*)&x)[0]; }bool is_big_endian() {unsigned int x 1;return !((char*)&x)[0];…

jsherp importItemExcel接口存在SQL注入

一、漏洞简介 很多人说管伊佳ERP&#xff08;原名&#xff1a;华夏ERP&#xff0c;英文名&#xff1a;jshERP&#xff09;是目前人气领先的国产ERP系统虽然目前只有进销存财务生产的功能&#xff0c;但后面将会推出ERP的全部功能&#xff0c;有兴趣请帮点一下 二、漏洞影响 …

体验用ai做了个python小游戏

体验用ai做了个python小游戏 写在前面使用的工具2.增加功能1.要求增加视频作为背景。2.我让增加了一个欢迎页面。3.我发现中文显示有问题。4.我提出了背景修改意见&#xff0c;欢迎页面和结束页面背景是视频&#xff0c;游戏页面背景是静态图片。5.提出增加更多游戏元素。 总结…