python爬取豆瓣电影排行前250获取电影名称和网络链接[静态网页]————爬虫实例(1)

2023-05-16

目录

1.算法原理:

2.程序流程:

3.程序代码:

4.运行结果(部分结果展示):

5.结果分析:


1.算法原理:

(1)利用import命令导入模块或者导入模块中的对象;

①利用requests库获取数据;

②用BeautifulSoup库将网页源代码转换成BeautifulSoup类型,以便于数据的解析和处理;

③用time库进行时间延时,避免访问速度过快被封禁(封禁后会一段时间内无法进行对网址的访问);

(2)利用resquests.get()获取的数据,其中第一个参数为网页链接,第二个参数为请求头Headers,返回的数据类型为字符串类型网页源代码;

(3)利用BeautifuSoup()命令将获取的网页源代码转化为BeautifuSoup对象,第一个参数为要解析的HTML文本,即网页源代码,第二个参数为解析HTML的解析器;

(4)利用CSS选择器,找到我们所需要的数据,在CSS选择器中,“#”表示id,“.”表示class;

(5)tag(标签)对象的常用属性/方法

属性/方法作用
tag.find()返回符合条件的首个数据
tag.find_all()返回符合条件的所有数据
tag.text获取标签的文本内容
tag['属性名']获取标签HTML属性的值

例如:

(6)字符串的format格式:<模板字符串>.format(<以逗号分隔的参数>),format()中参数和前面的{}顺序一 一对应例如:

print('我是{},来自{}。'.format('小浪','中国'))

也可以在{}中加入序号,format()括号中类似列表进行读取,序号对应列表的下标,例如:

print('我是{1},来自{0}。'.format('中国','小浪'))

也可以给占位符{}命名,例如:

print('我是{name},来自{country}。'.format(country='中国',name='小浪'))

以上三种都输出:我是小浪,来自中国。

2.程序流程:

(1)利用import导入第三方库requests,time和bs4库中的BeautifulSoup;

(2)创建get_film函数,形参为变量link(用于传入网址,因为每页只有25部电影,爬取250部,每个网页链接末尾的查询字符串会有所不同)

(3)为了应对反爬虫机制,这里修改请求头,将网页中User-Agent字段定义为字典,传入requests.get()命令中,赋值给变量res(当然,也有其他的方法,比如通过别的IP访问网站,具体请自己查看requests的官方文档:https://cn.python-requests.org/zh_CN/latest/);

①: 打开豆瓣电影top250排行版,右击(以搜狗浏览器为例)--->审查元素,点击方块内图标

 ②:随便点击一个电影名,以《肖申克的救赎》为例,网页加载完毕点击Network标签,里面可能为空的,刷新一下网页就好了。点击Network——>name中第一个标签——>找到Requests Headers标签——>找到User-Agent字段。

 (4)将res.text(源代码的字符串格式)传给BeautifulSoup命令,并且用Python内置的解析器html.parser,赋值给变量soup;

 (5)利用CSS选择器找到标签为div,class="hd"的所有元素(随便点击一部电影名称,以《肖申克的救赎》为例,观察到的规律为电影链接、电影名分布在标签为:div,class="hd"的标签“a”中),传入soup.select()命令中,赋值给item

 (6)遍历item中的所有元素,观察发现链接在标签a中的href属性中,电影名在标签a中第一个标签span的文本中,此时用find命令可以找到第一个符合条件的元素,找到第一个标签其中的文本内容,并输出电影名和电影链接;

(7)观察豆瓣10页的网页链接(每页25个电影,其实就观察几页就可以发现规律):

https://movie.douban.com/top250?start=0&filter=(第一页,从一开始网页打开没有问号后的查询字符串,从其他页跳到第一页就有了,第一页带查询字符串和不带查询字符串打开内容相同)

https://movie.douban.com/top250?start=25&filter=(第二页)

https://movie.douban.com/top250?start=50&filter=(第三页)

通过以上三个网页链接的对比发现,只有start后面的发生了改变,那么就可以利用字符串的format格式,进行创建字符串列表link_all

(8)遍历10页网页,传入之前建立的函数get_film,利用time.sleep()进行延时爬取,防止访问速度过快被对方服务器封禁。

3.程序代码:

import requests
import time
from bs4 import BeautifulSoup

def get_film(link):
    headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0'}
    res=requests.get(link,headers=headers)

    soup=BeautifulSoup(res.text,'html.parser')
    items=soup.select('div.hd a')
    for i in items:
        name=i.find('span').text
        link_film=i['href']
        print('电影名:',name,'网址:',link_film)

l='https://movie.douban.com/top250?start={}&filter='
link_all=[l.format(i*25) for i in range(10)]
for i in range(10):
    get_film(link_all[i])
    time.sleep(1)

4.运行结果(部分结果展示):

5.结果分析:

     程序获取的结果与预期结果相同,在找到电影名的过程中可以使用find和find_all命令,可以不使用CSS选择器,也可以将电影名存到txt文档,或者excel文档中,便于储存。此程序仅演示豆瓣电影名、电影网络链接,其他静态网页也可通过此方法进行爬取。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬取豆瓣电影排行前250获取电影名称和网络链接[静态网页]————爬虫实例(1) 的相关文章

随机推荐

  • 立创EDA入门

    如有错误 xff0c 感谢指正 如有错误 xff0c 感谢指正 xff0c 请私信博主 xff0c 有辛苦红包 xff0c 拜 一字之师 请根据目录寻找自己需要的段落 导语 xff1a 本博客为个人整理EDA学习记录帖 xff0c 如有错误
  • DockerFile构建过程

    DockerFile构建过程 了解镜像加载原理 Docker镜像加载原理 UnionFS 联合文件系统 xff09 UnionFS 联合文件系统 xff09 Union文件系统 UnionFS 是一种分层 轻量级并且高性能的文件系统 xff
  • 杂记——1.Navicat连接远程数据库时出现的2003错误

    1 问题描述 当我们用Navicat连接自己的远程数据库时 xff0c 在IP地址与密码都输入正确的情况下 xff0c 点击测试连接时有时会出现以下情况 导致连接失败 xff0c 这就会困扰许多新手小伙伴 xff0c 为什么我的IP与密码都
  • 杂记——9.eclipse启动Tomcat

    这篇文章 xff0c 我们简单的来说一下如何用eclipse启动Tomcat 具体步骤如下所述 第一步 xff1a 打开eclipse xff1a 第二步 xff1a 点击上方的 Window 第三步 xff1a 点击Preferences
  • 杂记——12.腾讯会议使用OBS虚拟摄像头实现多屏幕共享的解决方法

    这篇文章将来讲述一下腾讯会议如何使用OBS虚拟摄像头来实现多屏幕共享 目录 1 下载地址 2 下载与安装 2 1 OBS Studio的下载与安装 2 2 OBS VirtualCam 虚拟摄像头插件的下载与安装 3 运行与操作 4 小问题
  • 一种基于OpenCV的陪护机器人

    近年来人工智能不断发展 xff0c 从工业领域扩散到多个领域 xff0c 功能逐渐变多 xff0c 从以前的工业机器人到现如今的服务类机器人 xff0c 人工智能在不断提升与完善 本文针对老年人 xff0c 儿童 xff0c 病人等实际的应
  • 操作系统——13.处理机调度的时机、切换与过程、方式

    这篇文章我们继续来学习进程调度的相关知识 目录 1 概述2 2 进程调度的时机 3 进程调度的方式 4 进程的切换与过程 5 小结 1 概述2 首先 xff0c 我们来看一下本节类容的大体框架 xff1a 2 进程调度的时机 进程调度 xf
  • 开发手册——一、编程规约_1.命名风格

    这篇文章主要梳理了在java的实际开发过程中的编程规范问题 本篇文章主要借鉴于 阿里巴巴java开发手册终极版 下面我们一起来看一下吧 1 强制 代码中的命名均不能以下划线或美元符号开始 xff0c 也不能以下划线或美元符号结束 反例 xf
  • 杂记——16.idea中导入maven项目

    这篇文章我们来讲一下如何从Gitee上拉取项目 xff0c 并将该项目导入到idea中 目录 1 拉取项目 2 idea导入项目 3 更改相关的配置 3 1更改maven仓库 3 2更改数据库的连接池 1 拉取项目 第一步 xff1a 找到
  • 数据结构与算法——7.线性表——1.顺序表

    这篇文章我们来讲一下线性表 1 线性表概述 线性表是最基本 最简单 xff0c 也是最常用的一种数据结构 一个线性表是n个具有相同特性的数据元素的有限序列 下面介绍两个术语 xff1a 前驱元素 xff1a 若A元素在B元素前面 xff0c
  • java基础知识——16.多态

    这篇文章 xff0c 我们来介绍一下java的多态 目录 1 多态概述 2 多态调用成员的特点 3 多态的优势与弊端 4 instanceof 关键字 5 小结 1 多态概述 我们先来回顾一下前面的知识 利用封装 xff0c 我们可以将一些
  • java基础知识——23.正则表达式

    这篇文章我们简略的讲一下java的正则表达式 目录 1 正则表达式概述 2 正则表达式的简单匹配规则 3 正则表达式的复杂匹配规则 4 正则表达式的分组匹配规则 5 正则表达式的非贪婪匹配 6 使用正则表达式进行搜索和替换 1 正则表达式概
  • java基础知识——26.反射

    这篇文章我们来讲一下java的代理与反射 xff0c 这是很重要的一部分内容 目录 1 什么是反射 2 获取class对象的三种方式 3 反射获取构造方法 4 利用反射来获取成员变量 5 利用反射来获取成员方法 6 反射的作用 7 反射小结
  • java基础知识——27.动态代理

    这篇文章 xff0c 我们来学一下java的动态代理 目录 1 动态代理的介绍 2 具体的代码实现 1 动态代理的介绍 动态代理 xff1a 无侵入式的额外给代码增加功能 很不好理解 xff0c 下面 xff0c 我们通过两个例子来说明一下
  • JavaWeb——1.JavaWeb概述

    这是我们javaweb的第一篇文章 xff0c 首先我们来介绍一下什么是Javaweb JavaWeb xff1a 使用java语言完成服务器端程序开发 如下面这张图所示 xff1a 可能不太好理解 xff0c 那么就用通俗的语言来解释一下
  • 关于创建spring boot项目时的报错(java: 无法访问org.springframework.boot.SpringApplication 错误的类文件:xxx类文件具有错误的版本 61)

    最近使用idea创建一个新的spring boot项目时出现了一个错误 xff0c 完成项目创建后直接运行项目出现了以下错误 当然在出现了这个问题前 xff0c 项目还出现明明已经选了Java8的版本 xff0c 项目构建完成后Java版本
  • 【公网映射——让私人电脑成为一台公网服务器】

    一 前言 自己有台电脑一直空着 xff0c 想着如果能把这台电脑布成一个服务器 xff0c 做测试用 xff0c 就能发挥它的余热了 二 步骤概述 2 1 把电脑的8080端口映射到公网 xff0c 使得外网可以访问到这台电脑的web工程
  • 数据结构-指针和结构体

    1 指针 首先看变量在内存中的存储 有时候需要获取并使用程序运行中某个变量的内存地址 xff0c 如何获取这个地址 如何存储这个地址 xff1f amp 取地址符 xff0c amp a就是获得了a的地址 可以存储地址的变量称为指针变量 指
  • mysqldump+binlog+gtid 实现数据库的增量备份

    文章目录 mysqldump备份数据库高级备份参数 xff1a binlog日志的GTID新特性示例 xff1a 演示跨binlog文件截取日志 mysqldump备份数据库 完全备份 43 增加备份 xff0c 速度相对较慢 xff0c
  • python爬取豆瓣电影排行前250获取电影名称和网络链接[静态网页]————爬虫实例(1)

    目录 1 算法原理 xff1a 2 程序流程 xff1a 3 程序代码 xff1a 4 运行结果 部分结果展示 xff1a 5 结果分析 xff1a 1 算法原理 xff1a xff08 1 xff09 利用import命令导入模块或者导入