当前位置: 首页 > news >正文

【自用】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项目&#xff0c;我在使用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 处理方法&#xff1a; 修改flink-runtime-web/pom.xml文件 将<arguments>ci --cache-max0 --no-save ${npm.proxy}</arguments> 替换为&#xff1a;<a…...

2024年8月份编译Openwrt系统基础

概述&#xff1a; 本文档记录openwrt系统的编译过程&#xff0c;以备后续再用&#xff0c;技术支持与指导&#xff01; 1.编译环境 环境需要Linux&#xff0c;我使用的环境是WSL2、Ubuntu 20.04 2.安装编译必须的依赖&#xff08;wsl、linux&#xff09; WSL2&#xff1a;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等文件&#xff0c;并在文件夹内放置以下内容&#xff08;注&#xff1a;URL要和真实请求地址保持一致&am…...

动态规划(二)——例题

目录 Help Jimmy 题目 解题思路 神奇的口袋 题目 枚举的解法 递归的解法 动态规划的解法 滑雪 题目 解题思路 解法一 解法二 Help Jimmy 题目 "Help Jimmy" 是在下图所示的场景上完成的游戏&#xff1a; 场景中包括多个长度和高度各不相同的平台。地面是…...

Node.js中判断是文件还是文件夹的多种方法

在Node.js中&#xff0c;我们经常需要判断一个路径是文件还是文件夹。Node.js提供了多种方法来实现这一功能&#xff0c;本文将详细介绍这些方法&#xff0c;并给出相应的示例代码。 一、使用fs.Stats对象 在Node.js中&#xff0c;fs模块提供了fs.stat()或fs.statSync()方法&…...

idea 如何打war包

idea 如何打war包 1.在IntelliJ IDEA中打包WAR文件&#xff0c;你可以按照以下步骤操作:1.设置项目结构:首先&#xff0c;打开IDEA&#xff0c;选择File>Project Structure(或使用快捷键CtrlAltShiftS)。在打开的窗口中&#xff0c;选择 Artifacts 选项 2.添加Web Applicat…...

米联客-FPGA程序设计Verilog语法入门篇连载-15 Verilog语法_跨时钟域设计

软件版本&#xff1a;无 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用所有系列FPGA 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑&#xff01; 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),前端通…...

魔兽世界游戏插件开发从入门到实战:工具详解与效率提升指南

魔兽世界游戏插件开发从入门到实战&#xff1a;工具详解与效率提升指南 【免费下载链接】wow_api Documents of wow API -- 魔兽世界API资料以及宏工具 项目地址: https://gitcode.com/gh_mirrors/wo/wow_api 作为魔兽世界玩家&#xff0c;你是否曾想过通过自定义插件提…...

避免这些坑!Unity2D界面转换中常见的动画事件处理问题及解决方案

避免这些坑&#xff01;Unity2D界面转换中常见的动画事件处理问题及解决方案 在Unity2D游戏开发中&#xff0c;界面转换是提升用户体验的关键环节。一个流畅的淡入淡出效果能让场景切换更加自然&#xff0c;但很多开发者在实际操作中常会遇到动画事件不触发、协程执行异常等问题…...

形态学操作进阶:手把手教你设计Hit-or-Miss内核检测十字/直角结构

形态学操作进阶&#xff1a;手把手教你设计Hit-or-Miss内核检测十字/直角结构 在计算机视觉领域&#xff0c;形态学操作一直是图像处理中不可或缺的技术手段。其中&#xff0c;Hit-or-Miss变换作为一种高级形态学操作&#xff0c;能够精准定位二值图像中的特定结构模式。想象一…...

Debian 12上彻底卸载TigerVNC的5个隐藏步骤(附残留文件清理技巧)

Debian 12上彻底卸载TigerVNC的5个隐藏步骤&#xff08;附残留文件清理技巧&#xff09; 作为Linux系统管理员&#xff0c;你是否遇到过TigerVNC卸载后仍然出现端口占用或配置冲突的情况&#xff1f;常规的apt remove往往无法彻底清除所有痕迹。本文将揭示那些鲜为人知的清理技…...

ArcSWAT实战避坑指南 | 从数据库配置到模型运行,详解常见报错与高效解决方案

1. ArcSWAT入门避坑&#xff1a;从安装到首次运行的关键准备 第一次接触ArcSWAT的水文研究者&#xff0c;往往会在安装环节就踩坑。我见过太多人因为版本兼容性问题&#xff0c;导致后续模型根本无法启动。这里分享几个血泪教训&#xff1a; ArcGIS版本选择是首要关键。虽然官方…...

AI 开发实战:需求变更后,如何让 AI 自动补回归范围

AI 开发实战&#xff1a;需求变更后&#xff0c;如何让 AI 自动补回归范围 一、这个问题为什么值得专门拿出来做&#xff1f; 在 AI 工程落地里&#xff0c;真正拖慢团队的往往不是模型本身&#xff0c;而是流程和协作方式没有跟上。 围绕“需求变更后&#xff0c;如何让 AI 自…...

别再乱用.pem和.key了!用ASN.1 Editor手把手拆解RSA私钥的PKCS#8格式(附OpenSSL 3.1验证)

从文件后缀到密钥本质&#xff1a;用ASN.1 Editor透视RSA私钥的PKCS#8结构 当你在终端输入openssl genpkey -algorithm RSA生成密钥对时&#xff0c;是否曾好奇过.pem文件里那些看似随机的字符究竟隐藏着什么秘密&#xff1f;面对invalid key format的错误提示&#xff0c;又是…...

3分钟快速找回QQ号:手机号逆向查询终极指南

3分钟快速找回QQ号&#xff1a;手机号逆向查询终极指南 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 你是否曾经因为忘记QQ号而无法登录重要应用&#xff1f;或者需要验证手机号与QQ的绑定关系&#xff1f;今天我要介绍的这款Pyth…...

游戏原画效率提升50%:Pixel Fashion Atelier在角色装备概念图批量生成中的应用

游戏原画效率提升50%&#xff1a;Pixel Fashion Atelier在角色装备概念图批量生成中的应用 1. 传统游戏原画设计的痛点 游戏开发过程中&#xff0c;角色装备设计往往是最耗时的环节之一。传统工作流程中&#xff0c;美术团队需要&#xff1a; 手工绘制数十种装备变体反复修改…...

M9A智能助手:《重返未来:1999》自动化管理解决方案

M9A智能助手&#xff1a;《重返未来&#xff1a;1999》自动化管理解决方案 【免费下载链接】M9A 1999 小助手 项目地址: https://gitcode.com/gh_mirrors/m9/M9A 玩家在《重返未来&#xff1a;1999》中常面临日常任务繁琐、资源管理复杂、多账号操作效率低等问题。M9A智…...