【重生之我是蜘蛛侠】手把手教你用python爬虫,跟着做就好了

news2024/10/6 18:27:09

 

💯 博客内容:【LeetCode训练营】用栈来实现队列+用队列来实现栈 详解

😀 作  者:陈大大陈

🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信!

💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

目录

获取豆瓣网页源码 

怎么伪装成浏览器请求

怎么打印标题 

最终代码 

后记

首先要安装bs4这个第三方库。

打开pycharm的终端界面,输入pip install bs4即可安装。

我之前安装过,所以显示已安装。 

第三步是导入requests库,没有的话也要安装,步骤和上面的一样,命令变为pip install requests

获取豆瓣网页源码 

先获取网页源码,需要我们先导入requests库。

先试试直接获取,看能不能成功。

import requests
response=requests.get("https://movie.douban.com/top250")
print(response)
print(response.status_code)

结果如下。 

 打印出错误码,访问失败。

这是因为豆瓣网页识别出了我们的程序,而豆瓣网页只想服务于真正的用户。

那么我们接下来要做的就是将程序伪装成浏览器请求来伪装成用户。

怎么伪装成浏览器请求

 首先随便打开一个网页。

右键点击检查。

找到网络选项,点击跳转到下面的页面。

接着刷新页面,页面变成下面这样。

 随便点开一个,找到User-Agent选项。

复制它之后的内容。

我们创建一个叫headers的字典,它里面的键值对就是我们要传入的内容。

将代码升级为下面这样。 

import requests
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.42"
}
reponse=requests.get("https://movie.douban.com/top250",headers=headers)
print(reponse)
print(reponse.status_code)
print(reponse.text)

 运行。

没有报错,访问成功。接下来打印源码。

print(response.text)

 打印成功。

怎么打印标题 

第二步就是从bs4中导入BeautifulSoup库

from bs4 import BeautifulSoup

将响应体里面的内容用一个html变量储存。

html=response.text

接下来把html传入 BeautifulSoup的构造函数来获取想要的信息。

第二个参数传入html.parser,它的含义是html解析器,代表正在解析html内容。

使用一个变量储存它。

接下来我们需要知道所查找信息的特点。

打开豆瓣网页,右键检查,选择小箭头,鼠标靠近电影名称。

我们发现标题都是span元素,且class属性都是title。

这样我们就可以使用BeautifulSoup的findAll方法,第一个标签传入标签名span,第二个标签传入class值。 

all_titles=soup.findAll("span",attrs={"class":"title"})

findAll返回的是一个可迭代对象,我们来迭代一下它,打印出来如下所示。

我们不想要它的HTML标签,所以就只打印它的string属性。

   print(title_string)

这次打印出来如下所示,我们也不想要它的原版标题,该怎么删除呢?

一个简单的if判断就能搞定。

title_string=title.string
if '/' not in title_string:
print(title.string)

 

 这样,top25的电影就被我们打印出来了。

可我们想要的是top250。

继续找规律。

 这是第一页的网址。

这是第二页的地址。 

我们发现第一页和第二页的区别只在于start的值。

那我们就可以通过修改start的值加上for循环来达到目的。

最终代码 

from bs4 import BeautifulSoup
import requests
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.42"}
for num in range(0,250,25):
    response=requests.get(f"https://movie.douban.com/top250?start={num}",headers=headers)
    # print(response)
    # print(response.status_code)
    html=response.text
    soup=BeautifulSoup(html,"html.parser")
    all_titles=soup.findAll("span",attrs={"class":"title"})
    for title in all_titles:
        title_string=title.string
        if '/' not in title_string:
            print(title_string)

爬虫虽好,不要贪杯哦,不然。。。 

后记

这篇文章是看这个视频做的笔记。【10-实战课】从源码获取豆瓣电影TOP250_哔哩哔哩_bilibili​​​​​​

这个up主讲的巨好,建议大家都看看。 

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

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

相关文章

高可用架构之异地多活

大家好,我是易安! 当谈到架构的高可用时,无论是高可用计算架构,还是高可用存储架构,其本质的设计目的都是为了解决部分服务器故障的场景下,如何保证系统能够继续提供服务。但在一些极端场景下,有…

MySQL高级篇第一天

目录 一、索引 二、索引结构 三、索引分类 四、索引语法 五、索引设计原则 六、视图 七、存储过程与概述 八、触发器 九、总结 一、索引 (一)索引概述 索引是一种能够帮组Mysql高效的从磁盘上查询数据的一种数据结构,这些数据结构以某…

Life of a Packet in Kubernetes - Calico网络进阶(注解版)

目录 Topics — Part 2 CNI Requirements BIRD (BGP) ConfD Felix Routing Modes IP-in-IP (Default) NoEncapMode VXLAN Demo — IPIP and UnEncapMode Demo — VXLAN Disclaimer References As we discussed in Part 1, CNI plugins play an essential role in …

【面试题】Redis过期删除与内存淘汰

文章目录 Redis过期删除策略🙎‍♂️面试官:如何设置key的过期时间?🙎‍♂️面试官:什么是Redis过期删除策略?🙎‍♂️面试官:过期的key存放到哪里/如何判断key是否过期?…

又到了择业的时候

前言 记得2020年的时候,第一次买房背上贷款,一共一百多万连利息将近两百万,突然就有了危机感,不自觉的会考虑如果我的人生有什么重大变故,我的家人会怎么办?他们承担每个月的房贷月供吗?还是被…

ciscn_2019_es_2

小白垃圾做题笔记,不及建议阅读。 声明,exp来自网络,调试过程自己调试,对于题目的理解仅供参考。由于本人也是小白,且pwn全靠自己摸索,所以有很多理解不到位的地方。如有错误,欢迎指正。 1.做…

新星计划2023【网络应用领域基础】——————Day1

网络应用基础讲解 前言 什么是网络? 什么是网络,网络是什么?能为我们做什么?带着疑问博主一一给你解决 这一章我将带你了解古代人是如何利用“网络”通信的,网络的发展史,osi七层模型,带你了解T…

【2023/05/21】simula

Hello!大家好,我是霜淮子,2023倒计时第16天。 本文将讨论一个广泛关注的话题,即在信息安全领域中如何使用Simula工具进行攻击模拟和威胁情报分析。在这篇文章中,我们将介绍Simula的概念、原理和应用,评价其…

RK3568平台开发系列讲解(驱动基础篇)RK平台RTC的使用

🚀返回专栏总目录 文章目录 一、HYM8563模块二、HYM8563模块三、接口使用3.1 sysfs 接口3.2 procfs 接口3.3 ioctl 接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将对RK RTC的使用进行学习。 一、HYM8563模块 ROC-RK3568-PC开发板采用HYM8563作为RTC(Rea…

Android Codelabs

Android Codelabs 提供引导式、教程式、实践编码体验。将引导您完成构建小型应用程序或向现有应用程序添加新功能的过程。该项目将持续收集并整理有关 Android Codelabs 相关文章,提供给感兴趣的读者进行阅读。 使用 Kotlin 进行高级 Android 开发 本课程提供了一…

gcc确认编译器默认头文件

文章目录 1. 背景2. gcc 空编译查看3. 总结 gcc确认编译器默认头文件 1. 背景 linux下查看编译时依赖的头文件,可以直接使用 -Iinclude_path进行指定,没有指定的会从默认头文件位置去查找,如果还找不到,就会报错。那么&#xff0c…

【C++进阶】多态详解(下)

文章目录 单继承中的虚函数表多继承中的虚函数表动态绑定与静态绑定问题探究第一步:观察普通调用的汇编代码第二步:观察ptr1的汇编代码:第三步:观察ptr2的汇编代码:总结: 继承和多态常见的面试问题 单继承中的虚函数表…

Linux:shell之编程免交互

Linux:shell之编程免交互 一、Here Document 免交互1.1 Here Document 免交互概述1.2 语法格式1.3 操作 二、Expect 命令2.1 Expect 概述2.2 基本命令2.3 操作 一、Here Document 免交互 1.1 Here Document 免交互概述 使用I/O重定向的方式将命令列表提供给交互式…

ACM 1011 | 最大公约数与最小公倍数

文章目录 0x00 前言 0x01 题目描述 0x02 问题分析 0x03 代码设计 0x04 完整代码 0x05 运行效果 0x06 总结 0x00 前言 C 语言网不仅提供 C 语言,还包括 C 、 java 、算法与数据结构等课程在内的各种入门教程、视频录像、编程经验、编译器教程及软件下载、题解博…

2023上海市大学生网络安全大赛—ssql题解

Part1前言 上海市大学生网络安全大赛的一道 pwn 题目,题目用了双向链表(猜到是 Unlink 漏洞)。 还算比较简单,主要是分析代码比较复杂。分析完后漏洞限制条件少,题目给了 libc2.31,利用比较灵活。 这题白天…

linux【网络编程】TCP协议通信模拟实现、日志函数模拟、守护进程化、TCP协议通信流程、三次握手与四次挥手

linux【网络编程】TCP协议通信模拟实现、日志函数模拟、守护进程化、TCP协议通信流程 一、TCP通信简单模拟实现1.1 服务端实现1.1.1 接口认识1.1.1.1 listen:监听socket1.1.1.2 accept:获取连接 1.1.2 tcpServer.hpp1.1.3 tcpServer.cc 1.2 客户端实现1.…

软考知识点---08IP地址与域名地址

一、IP地址 (一)什么是IP地址? 连入互联网的计算机,每台计算机或者路由器都有一个由授权机构分配的号码,IP地址代表这一台计算机在网络中的地址 在同一个网络中IP地址是唯一的 IP(IPV4)地…

音频的各项指标

对于下面data和linesize的解释(参考下面3.4中的av_samples_alloc_array_and_samples函数说明): 1)data是通道的意思,例如双通道,data[0]代表左声道,data[1]代表右声道。 2)linesize为采样个数的最大大小字…

ChatGPT全栈开发实战:从需求分析到数据可视化,一站式指南助你快速构建全面应用

文章目录 序章:PDF版下载第一章:Java后端开发1.需求分析1.1 项目分析1.2 开发计划1.3 风险评估1.4 需求增强1.5 需求转情景 2.生成代码2.1 解析文件2.2 数据结构2.3 算法策略2.4 异步处理 3.Bug修改3.1 逻辑错误3.2 性能问题3.3 资源泄露3.4 死锁问题3.5…

MySQL之存储过程和存储函数

1. 存储过程概念 能够将完成特定功能的SQL指令进行封装(SQL指令集),编译之后存储在数据库服务器上,并且为之取一个名字,客户端可以通过名字直接调用这个SQL指令集,获取执行结果。 2. 存储过程优缺点 2.1 优点 (1&am…