[爬虫基础]--抓取豆瓣top250电影, 简单易懂, 零基础入门

news2024/11/26 1:50:12

1. 抓取目标:

下载top250电影的图片, 并以电影名称作为文件名进行保存

 2. 获取网页源代码:

我们每天看到的浏览器页面, 本质上都是html代码和css代码, 向服务器发出请求后, 服务器会返回一连串的信息, 经过浏览器选然后, 就变成了我们每天看到的界面

可以在网页中通过鼠标右键查看网页的源代码

获得网页的源代码是爬虫的第一步, 这一步需要用到requests包, 这是爬虫中最常用到的包, 可以模拟浏览器向服务器发出请求, 从而得到网页的源代码

import requests

 requests.get(url, headers)

使用requests中的get函数, 传入网址就可以获得网页的源代码,  那么headers又是什么?

header是请求头, 现在很多网页都有防爬虫的机制, 如果直接申请, 服务器很有可能就会忽略掉, 是headers参数可以模拟用户使用浏览器发出申请, 从而正常获取到资源

如何获取到自己的headers?同样鼠标右键, 点击检查

  • 第一步, 点击网络
  • 第二步, 刷新浏览器
  • 第三步, 随机找到一个资源, 拖动找到User-Agent

 headers以字典的形式报存, key值为User-Agent, value值是后面一长串的信息

    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0'}

 在观察网页, 豆瓣电影以25个电影为一页, 一共250个, 不同的网页之间发现区别也就只要start后的数值不同, 使用for循环来访问不同网页

 

for i in range(0,250,25):
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0'}
    data = requests.get(rf'https://movie.douban.com/top250?start={i}&filter=',headers=headers).content.decode('utf-8')

 get函数返回Respond对象, 我们只需要里面的content内容, 在经过解码就可以获得网页的源代码

使用print函数打印一些, 发现跟我们在浏览器看到的代码是一样的

3.筛选出图片信息

同样右键检查, 使用左上角的小工具, 点击图片, 可以找到这个图片的代码位置, 这个代码就包括了我们所有想要的信息: 电影名称, 图片资源位置 

我们是找到了, 但是如何用代码找到? 这就需要使用到正则表达式

 <img width="100" alt="怦然心动" src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p501177648.webp" class="">

观察所有的图片代码, 都以<img开头, alt参数是电影名, src参数是图片资源在服务器中存放的位置

因此正则表达式可以像我一样这么写,

  • .*表示匹配任意字符 
  • ()内就是我们想要的
for i in range(0,250,25):
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0'}
    data = requests.get(rf'https://movie.douban.com/top250?start={i}&filter=',headers=headers).content.decode('utf-8')

    data_list = data.split('\n')
    for line in data_list:

        result = re.match('.*<img width.*alt="(.*)" src="(.*)" class=.*>',line)
        if result:
            name = result.group(1)
            pic_url = result.group(2)
            print(name,pic_url)

最后使用print打印一下, 看下是否筛选正确

4.图片下载和保存

知道src, 我们自然可以从服务器中获取图片下载下来, 在当前目录下创建top250文件夹来保存图片, 添加延时让程序运行更加稳定, 运行程序就可以下载了

import requests
import re
import time

for i in range(0,250,25):
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0'}
    data = requests.get(rf'https://movie.douban.com/top250?start={i}&filter=',headers=headers).content.decode('utf-8')

    data_list = data.split('\n')
    for line in data_list:

        result = re.match('.*<img width.*alt="(.*)" src="(.*)" class=.*>',line)
        if result:
            name = result.group(1)
            pic_url = result.group(2)
            print(name,pic_url)
            with open(rf'top250\{name}.jpg','wb') as f:
                picture = requests.get(pic_url,headers=headers)
                f.write(picture.content)
            time.sleep(1)

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

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

相关文章

Linux系统编程 --- day1

目录 1. 标准IO 2. 基本操作 2.1 fopen 2.2 fgetc 2.3 fputc 2.4 fgtes 2.5 fputs 2.6 fread 2.7 fwrite 3. linux的文件 1. 标准IO &#xff08;1&#xff09;标准io的概念 1975 Dennis r IO库&#xff0c;C语言的标准&#xff0c; IO --- input output I&#xff…

当前人形机器人公司及产品介绍

产品型号属地公司名字Optimus美国特斯拉Figure02美国FigureAIAtlas美国波士顿动力通用人形Apollo美国ApptronikPhoenix加拿大Sanctuary AIRoBee意大利OversonicASIMO日本本田NAO日本软银GR-1上海傅利叶远征A1上海智元XR4上海达闼先行者K1上海开普勒青龙上海国创AstribotS1深圳星…

AIDL使用及原理介绍

一、AIDL使用及理解 介绍参考官方文档&#xff1a;https://developer.android.com/develop/background-work/services/aidl?hlzh-cn 1.1、aidl文件的产物 1.1.1 aidl文件 interface IDownloadIpc {//开始下载DownloadResponse start(in DownloadInfoParcel downloadInfo);…

【数据结构与算法】A*算法——自动寻路

这里写目录标题 一.为什么用A*算法二.A*算法的实现原理三.A*算法的实现1.初始化地图2.格子初始化3.两个列表4.起点到终点的路径5.起点到终点的最佳路径★6.资源的释放 四.完整代码1.Astar.h2.Astar.cpp3.main.cpp4.运行结果 一.为什么用A*算法 上节课我们已经讲了最短路径算法…

【Qt】内置对话框

一.Qt内置对话框 Qt 提供了多种可复⽤的对话框类型&#xff0c;即 Qt 标准对话框。Qt标准对话框全部继承于QDialog类。常⽤标准对话框如下&#xff1a; 二.内置对话框分类 1.消息对话框 QMessageBox 1.1 概念 消息对话框是应⽤程序中最常⽤的界⾯元素。消息对话框主要⽤于为…

SpringBoot集成微信小程序(二)【登录、获取头像昵称及手机号】

一、背景 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识&#xff0c;快速建立小程序内的用户体系。 微信小程序官方文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 二、技术栈 SpringBoot…

RFID在晶圆搬运机中的智能化实践

RFID在晶圆搬运机中的智能化实践 应用背景 在半导体制造行业&#xff0c;晶圆搬运是一个至关重要的环节&#xff0c;它不仅影响生产效率&#xff0c;还直接关系到产品的质量和成本。在如今的多品种少量生产中&#xff0c;要保障生产效率和品质&#xff0c;工序管理至关重要。…

Python环境安装及PIP安装(Mac OS版)

官网 https://www.python.org/downloads/ 安装python python-3.12.1-macos11.pkg下载后&#xff0c;安装一直下一步即可 验证是否安装成功&#xff0c;执行python3命令和pip3命令 配置环境变量 获取python3安装位置并配置在.bash_profile #查看python路径 which python3#…

卫星图像检测,分割,跟踪,超分辨率,数据集调研

卫星图像检测&#xff0c;分割&#xff0c;跟踪&#xff0c;超分辨率&#xff0c;数据集调研 超分辨率Image super-resolution: A comprehensive review, recent trends, challenges and applicationsA Review of GAN-Based Super-Resolution Reconstruction for Optical Remot…

ppt模板免费网站有哪些?自动美化工具推荐

新的8月&#xff0c;是时候以全新面貌迎接高效办公挑战了&#xff01; 想要你的PPT演示脱颖而出&#xff0c;却苦于找不到精美又免费的模板&#xff1f; 别担心&#xff0c;今天我来告诉你们&#xff1a;哪个软件有精美免费ppt模板&#xff1f; 今天我为你们精心汇总了6款PPT…

二维高斯拟合20240815

二维高斯拟合 高斯函数表达式 二维高斯函数是一个在二维空间中用来表示高斯分布的函数&#xff0c;常用于统计学、图像处理和机器学习等领域。其数学表达式通常为&#xff1a; f ( x , y ) 1 2 π σ x σ y 1 − ρ 2 exp ⁡ ( − 1 2 ( 1 − ρ 2 ) ( ( x − μ x ) 2 σ …

面向未来的算力网络连接技术架构

面向未来的算力网络连接发展特点与实践 物理层网络基础设施是算力网络的“最后一公里”&#xff0c;光纤光缆等物理层网络基础设施的发展有助于保障算力网络基础设施的稳健发展。物理层核心技术发生了巨大变化&#xff0c;在交换、传输等方面不断更新迭代&#xff0c;当前铜缆的…

【云原生】看一眼haproxy,秒变技术大佬(理论篇)

一、负载均衡 1、什么是负载均衡&#xff1f; 负载均衡&#xff1a;Load Balance&#xff0c;简称LB&#xff0c;是一种服务或基于硬件设备等实现的高可用反向代理技术&#xff0c;负载均衡将特定的业务(网络服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备&…

Secure CRT 9.x版本高亮着色配置文件

Secure CRT的网络配置文件高亮显示&#xff0c;还在完善&#xff0c;逐渐适配不同厂商 设备名字自动蓝色高亮显示设备接口名高亮显示IPv4地址、IPv6地址、MAC地址高亮显示掩码、反掩码高亮显示设备SN号高亮显示接口状态、设备状态等高亮显示各路由协议高亮显示 【下载地址】效果…

基于Spring Boot的疗养院管理系统的设计与实现

TOC springboot234基于Spring Boot的疗养院管理系统的设计与实现 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。…

输出Docker容器的启动命令行脚本

当Docker容器启动后&#xff0c;如果忘记启动参数&#xff0c;比如目录挂载、端口映射等&#xff0c;可以通过Portainer等容器管理工具查看。但是&#xff0c;有时希望能获取容器启动的命令行&#xff0c;因为需要再启动一个类似容器&#xff0c;怎么办呢&#xff1f; 有一款工…

【Python养成】:输出两个等腰三角形且平行方向

项目场景&#xff1a; 遇到一个小小的高中小程序题目&#xff0c;有趣就做 了一下&#xff0c;供大家参考。 问题描述 要求使用python编程&#xff0c;实现如下图形。 原因分析&#xff1a; 其实就是 找规律和找空格。先左边后右边。具体解释可以找AI。太简单了没必要亲自讲解…

Linux 7 x86平台上安装达梦8数据库

1、环境描述 2、安装前准备 2.1 操作系统信息调研 Linux平台需要通过命令查看操作系统版本、位数、磁盘空间、内存等信息。 CPU信息 [rootray1 ~]# cat /proc/cpuinfo | grep -E "physical id|core id|cpu cores|siblings|cpu MHz|model name|cache size"|tail -n…

【PY模型训练】最终测试

Anacoda3 安装 1. conda -V 2.conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/ 3.打开.condarc文件,将下面内容直接放入.condarc文件里面 channels: - conda-forge - defaults show_channel_urls: true default_ch…