【自用】Python爬虫学习(一):爬虫基础与四个简单案例
Python爬虫学习(一)
- 基础知识
- 四个简单的爬虫案列
- 1.使用urlopen获取百度首页并保存
- 2.获取某翻译单词翻译候选结果
- 3.获取某网页中的书名与价格
- 4.获取某瓣排名前250的电影名称
基础知识
对于一个网页,浏览器右键可以查看页面源代码,但是这与使用开发者工具的检查看到的结果不一定相同。

- 服务器渲染:相同则说明应该是服务器渲染,在页面看到的数据,源代码中就有,服务器将所有数据一并发送给客户端。只需要对网页进行请求,获得页面数据后对感兴趣内容进行数据解析即可。
- 客户端渲染:不一样则说明应该是客户端渲染,右键看到的页面源代码只是简单的html框架,数据信息是服务器单独再次发送,经客户端注入重新渲染的结果。
想要获取第二种类型的网页数据,需要用到浏览器的抓包工具。
如下所示,页面中含有“美丽人生”,但右键查看页面源代码,使用Ctrl+F搜索却没有该文本,说明该网页应该就属于第2种类型,即客户端渲染。

那么包含“美丽人生”的文本在哪里呢?在该页面右键点击最下面的检查,或者直接按F12键打开开发者工具。

依次点击左侧红色方框中的条目内容,查看右侧预览信息,发现第二个就应该是我们需要的内容,其中就有“美丽人生”的文本。

确定好之后,点击右侧的标头,目前需要关注这几个部分的信息。

编写代码尝试获取预览的数据信息
import requestsurl = 'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=0&limit=20'herders = {'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'
}resp = requests.get(url=url, headers=herders)print(resp.text)
运行结果:

可以看到,已经获取到预览中看到的所有数据,但略显杂乱,后续只需要对该部分内容进行感兴趣提取就行,显然这是python基础,与爬虫无关了,毕竟已经获取到了数据。
例如,只获取电影名称与评分,示例代码如下:
import requestsurl = 'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=0&limit=20'herders = {'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'
}resp = requests.get(url=url, headers=herders)
content_list = resp.json()for content in content_list:movie_name = content['title']movie_score = content['score']print(f'《{movie_name}》, 评分:{movie_score}')
运行结果:

四个简单的爬虫案列
1.使用urlopen获取百度首页并保存
from urllib.request import urlopenresp = urlopen('http://www.baidu.com')with open('baidu.html', mode='w', encoding='utf-8') as f:f.write(resp.read().decode('utf-8'))
2.获取某翻译单词翻译候选结果

参考源码:
import requestsurl = 'https://fanyi.baidu.com/sug'name = input('请输入你要查询的单词:')
data = {'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','kw': name
}resp = requests.post(url, data=data)fanyi_result = dict(resp.json()['data'][0])['v']
print(fanyi_result)resp.close()
3.获取某网页中的书名与价格

参考源码:
import requests
from bs4 import BeautifulSoupheaders = {"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"
}
url = "http://books.toscrape.com/"
response = requests.get(url=url, headers=headers)
if response.ok:response = requests.get("http://books.toscrape.com/")print(response.status_code) # 状态代码,200为请求成功content = response.text# 参数"html.parser"表明解析的是htmlsoup = BeautifulSoup(content, "html.parser")# 获取网站中书本的价格信息:根据属性查找对应的p标签,返回的结果为可迭代对象all_prices = soup.find_all("p", attrs={"class": "price_color"})# print(list(all_prices))print("=====书本价格:=====")for price in all_prices:# 利用price.string可以只保留html标签中的文本内容,再利用字符串的切片得到价格print(price.string[2:])print("=====书本名称:=====")# 获取网站中书名信息all_titles = soup.find_all("h3")for title in all_titles:all_links = title.findAll("a")for link in all_links:print(link.string)response.close()
else:print("请求失败")
4.获取某瓣排名前250的电影名称

参考源码:
import requests
from bs4 import BeautifulSoup# 获取豆瓣排名前250的电影名称# 浏览器标识
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"
}i = 1
for start_num in range(0, 250, 25):# print(start_num)response = requests.get(f"https://movie.douban.com/top250?start={start_num}", headers=headers)# print("服务器响应状态码:", response.status_code)response.encoding = "UTF-8" # 指定字符集if response.ok: # 如果服务器响应正常执行下面代码douban_top250_html = response.textsoup = BeautifulSoup(douban_top250_html, "html.parser")# all_titles = soup.find_all("span", attrs={"class": "title"})all_titles = soup.find_all("span", class_="title") # 两种写法效果都一样for title in all_titles:title_string = title.stringif "/" not in title_string:print(f"{i}:\t《{title.string}》")i = i + 1else:print("请求失败!")response.close()
相关文章:
【自用】Python爬虫学习(一):爬虫基础与四个简单案例
Python爬虫学习(一) 基础知识四个简单的爬虫案列1.使用urlopen获取百度首页并保存2.获取某翻译单词翻译候选结果3.获取某网页中的书名与价格4.获取某瓣排名前250的电影名称 基础知识 对于一个网页,浏览器右键可以查看页面源代码,…...
[python]uiautomation.WindowControl函数用法
Python UIAutomation 窗口控件 介绍 在本文中,我们将探讨Python UIAutomation库以及如何使用它来控制和自动化Windows应用程序。我们将介绍UIAutomation的基础知识及其功能,并提供代码示例来演示其用法。 什么是UI自动化? UIAutomation是一个…...
学习记录第二十七天
进程 wait函数 功能 等待子进程结束:父进程调用wait函数后,会暂停执行,直到它的某个子进程结束。收集子进程状态:当子进程结束时,wait函数会返回子进程的终止状态,包括是正常终止还是被信号终止等信息。…...
servlet的执行顺序
执行的时候Tomcat先初始化 然后调用 server 根据server来回调请求方式下面会追入源码解释 package com.haogu.servlet;import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.…...
Go语言 类封装和绑定方法
本篇文章主要内容为Go语言类相关操作:封装和绑定方法介绍及示例。 目录 封装 绑定方法 类方法形参 指针形参 设置类方法参数 指针与非指针区别 总结 封装 go语言支持类的操作,但是没有class关键字,使用struct来模拟类。 示例如下&am…...
DirectShow过滤器开发-写WAV音频文件过滤器
下载本过滤器DLL 本过滤器将PCM音频流,或ADPCM,IEEE_FLOAT,ALAW,MULAW,GSM610音频流写入WAV音频文件。 写WAV音频文件过滤器信息 过滤器名称:写WAV 过滤器GUID:{CF704A9C-0C67-4712-BA33-DD0A…...
php根据截止时间计算剩余的时间,并且在剩余时间不足1天时仅显示小时数
//获取政策库文章public function getIndexZckList(){$fl_id = input(fl_id);if(empty(...
Docker最佳实践进阶(一):Dockerfile介绍使用
大家好,上一个系列我们使用docker安装了一系列的基础服务,但在实际开发过程中这样一个个的安装以及繁杂命令不仅仅浪费时间,更是容易遗忘,下面我们进行Docker的进阶教程,帮助我们更快速的部署和演示项目。 一、什么是Dockerfile? Dockerfile 是一个文本文件,其中包含了…...
Anything in Any Scene:无缝融入任何场景,实现逼真视频对象插入技术
人工智能咨询培训老师叶梓 转载标明出处 现实世界的视频捕获虽然因其真实性而宝贵,但常常受限于长尾分布的问题,即常见场景过度呈现,而关键的罕见场景却鲜有记录。这导致了所谓的"分布外问题",在模拟复杂环境光线、几何…...
安卓开发中的AppCompat框架|安卓系统|安卓应用|兼容性|UI组件|核心组件|ActionBar|Fragment|最佳实践|框架|移动开发|移动应用
目录 1. 什么是AppCompat框架 1.1 AppCompat的起源 1.2 AppCompat的重要性 2. AppCompat框架的核心组件 2.1 AppCompatActivity 2.2 AppCompat主题 2.3 AppCompat Widgets 3. 在项目中使用AppCompat框架 3.1 添加依赖项 3.2 应用AppCompat主题 4. AppCompat的高级功…...
React使用useRef ts 报错
最近在写自己的React项目,我在使用useRef钩子函数的时候发现 TS2322: Type MutableRefObject<HTMLDivElement | undefined> is not assignable to type LegacyRef<HTMLDivElement> | undefined Type MutableRefObject<HTMLDivElement | undefined&g…...
python-信息交互-pyautogui
python-信息交互-pyautogui 一: pyautogui1> waht?2> 功能分类3> 概念及作用二: 通用功能1> function all2> function 注释三: 鼠标控制1> mouse functions2> mouse functions demo3> mouse drag demo四: keyboard控制1> keyboard functions2> …...
flink1.18 编译遇到的问题
1. flink-runtime-web编译失败 源码编译时一直卡在 [INFO] Running ‘npm ci --cache-max0 --no-save’ in 处理方法: 修改flink-runtime-web/pom.xml文件 将<arguments>ci --cache-max0 --no-save ${npm.proxy}</arguments> 替换为:<a…...
2024年8月份编译Openwrt系统基础
概述: 本文档记录openwrt系统的编译过程,以备后续再用,技术支持与指导! 1.编译环境 环境需要Linux,我使用的环境是WSL2、Ubuntu 20.04 2.安装编译必须的依赖(wsl、linux) WSL2:Bu…...
Vue3+vite+ts 项目使用mockjs
1、安装mockjs npm i mockjs 2、安装vite-plugin-mock npm i vite-plugin-mock -D 3、安装axios npm i axios 4.在src目录下创建mock文件夹,在文件夹内创建login.ts等文件,并在文件夹内放置以下内容(注:URL要和真实请求地址保持一致&am…...
动态规划(二)——例题
目录 Help Jimmy 题目 解题思路 神奇的口袋 题目 枚举的解法 递归的解法 动态规划的解法 滑雪 题目 解题思路 解法一 解法二 Help Jimmy 题目 "Help Jimmy" 是在下图所示的场景上完成的游戏: 场景中包括多个长度和高度各不相同的平台。地面是…...
Node.js中判断是文件还是文件夹的多种方法
在Node.js中,我们经常需要判断一个路径是文件还是文件夹。Node.js提供了多种方法来实现这一功能,本文将详细介绍这些方法,并给出相应的示例代码。 一、使用fs.Stats对象 在Node.js中,fs模块提供了fs.stat()或fs.statSync()方法&…...
idea 如何打war包
idea 如何打war包 1.在IntelliJ IDEA中打包WAR文件,你可以按照以下步骤操作:1.设置项目结构:首先,打开IDEA,选择File>Project Structure(或使用快捷键CtrlAltShiftS)。在打开的窗口中,选择 Artifacts 选项 2.添加Web Applicat…...
米联客-FPGA程序设计Verilog语法入门篇连载-15 Verilog语法_跨时钟域设计
软件版本:无 操作系统:WIN10 64bit 硬件平台:适用所有系列FPGA 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 1概述 本小节主要讲解Verilog语法的…...
gradio 对话界面实现支持图片、视频正常显示
参考: https://www.gradio.app/docs/gradio/chatbot 问题: gradio网页输出视频nan;图片webp显示不出来 解决方法:需要通过gradio的Video、Image包装 代码: 这里下面启动个后端vlm模型(参考:https://blog.csdn.net/weixin_42357472/article/details/141126225),前端通…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
