基于Python实现web网页内容爬取
文章目录
- 1. 网页分析
- 2. 获取网页信息
- 2.1 使用默认的urllib.request库
- 2.2 使用requests库
- 1.3 urllib.request 和 requests库区别
- 2. 更改用户代理
- 3. BeautifulSoup库筛选数据
- 3.1 soup.find()和soup.find_all() 函数
- 4. 抓取分页链接
- 参考资料
在日常学习和工作中,我们经常会遇到需要爬取网页内容的需求,今天就如何基于Python实现web网页内容爬取进行讲解。
1. 网页分析
用Chrome浏览器打开网页(https://car.yiche.com/)并进行分析。
F12键打开开发者视图,如下所示:
在网页页面上想要查看的页面内容处,点击 右键->检查(inspect)
,开发者模式中会自动选中对应的HTML代码。
分析发现车牌的名字在 name=“div”, attrs={“class”: “item-brand”}里面
2. 获取网页信息
在Python中,我们可以使用 urllib.request
和 requests
这两个库来发送HTTP请求。这两个库都是用来处理URLs的,但是有一些区别。
2.1 使用默认的urllib.request库
urllib.request
是Python标准库中的一个模块,用于处理URLs的打开,读取和下载。它提供了一个简单的接口来发送HTTP请求,并可以处理响应数据。
import urllib.request
from bs4 import BeautifulSoupurl = "https://car.yiche.com/"
page = urllib.request.urlopen(url)
soup = BeautifulSoup(page, "html.parser")
result_list = []# 筛选数据
tag_list = soup.find_all(name="div", attrs={"class": "item-brand"})
for tag in tag_list:result_list.append(tag.attrs["data-name"])print(result_list)
2.2 使用requests库
requests
是一个第三方库,它提供了更简洁的API来发送HTTP请求,并处理响应数据。使用requests库可以更方便地发送各种类型的请求,如GET,POST等,并可以设置请求头,传递参数等。
首先在环境中安装 requests 库,命令如下:
pip install requests
from bs4 import BeautifulSoup
import requestsurl = "https://car.yiche.com/"
req = requests.get(url=url)
soup = BeautifulSoup(req.content, "html.parser")
result_list = []# 筛选数据
tag_list = soup.find_all(name="div", attrs={"class": "item-brand"})
for tag in tag_list:result_list.append(tag.attrs["data-name"])print(result_list)
输出如下:
['奥迪', '埃安', 'AITO', '阿维塔', '阿斯顿·马丁', '阿尔法·罗密欧', 'AUDI', '阿莫迪罗', 'AUXUN傲旋', '爱驰', 'Apollo', 'ALPINA', 'Abarth', 'ABT', '阿尔特', '安凯客车', 'Aurus', 'Arash', '安徽猎豹', 'ATOM', '艾康尼克', 'ASKA', 'Alef', 'APEX', 'Agile Automotive', 'ATS', 'AKXY2', 'Alpine', 'Aspark', 'Aviar', 'AURA', 'AIM', 'Ariel', 'Aria', 'Atlis', 'Alpha Motor', 'AFEELA', 'AEHRA', 'AC Schnitzer', 'Adria', 'AZNOM', 'AEV ROBOTICS', '比亚迪', '奔驰', '本田', '宝马', '别克', '保时捷', '北京', '奔腾', '标致', '宝骏', '宾利', 'BAW北汽制造', '北京汽车', '布加迪', '博速', '巴菲特', '霸王龙', '奔驰卡车',.......]
1.3 urllib.request 和 requests库区别
urllib.request
和 requests
这两个库的主要区别如下:
- urllib.request是Python的标准库,而requests是第三方库,需要额外安装。
- urllib.request是比较底层的库,需要手动处理请求和响应,而requests提供了更高级的API,简化了请求和响应的处理。
- requests库更加简洁和易于使用,并提供了更多的功能,如自动处理重定向,会话管理等。
参考资料:python urllib.request和request的区别
2. 更改用户代理
在使用Python进行网页爬取时,许多网站会通过检查HTTP请求头中的User-Agent字段来识别发出请求的客户端类型。设置用户代理(User-Agent)是为了模仿真实浏览器的请求,避免被网站识别为自动化工具而遭封锁,同时确保获取完整的网页内容,并遵守网站的访问规则。
agent = {'User-Agent': 'Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit / 531.21.10(KHTML, likeGecko) Mobile / 7B405'}
req = requests.get(url=url, headers=agent)
3. BeautifulSoup库筛选数据
BeautifulSoup库是一种HTML解析库,可以将HTML文档解析成Python对象,使得开发者可以方便地从HTML文档中提取数据。
首先需要安装 BeautifulSoup
库。
pip install BeautifulSoup4
3.1 soup.find()和soup.find_all() 函数
Python中bs4的soup.find()和soup.find_all()用法
4. 抓取分页链接
参考资料
Python中bs4的soup.find()和soup.find_all()用法
使用Python进行网页抓取
相关文章:

基于Python实现web网页内容爬取
文章目录 1. 网页分析2. 获取网页信息2.1 使用默认的urllib.request库2.2 使用requests库1.3 urllib.request 和 requests库区别 2. 更改用户代理3. BeautifulSoup库筛选数据3.1 soup.find()和soup.find_all() 函数 4. 抓取分页链接参考资料 在日常学习和工作中,我们…...

Centos7和9安装mysql5.7和mysql8.0详细教程(超详细)
目录 一、简介 1.1 什么是数据库 1.2 什么是数据库管理系统(DBMS) 1.3 数据库的作用 二、安装MySQL 1.1 国内yum源安装MySQL5.7(centos7) (1)安装4个软件包 (2)找到4个软件包…...

星闪WS63E开发板的OpenHarmony环境构建
目录 引言 关于SDK 安装步骤 1. 更新并安装基本依赖 2. 设置 Python 3.8 为默认版本 3. 安装 Python 依赖 4. 安装有冲突的包 5. 设置工作目录 6. 设置环境变量 7. 下载预构建文件以及安装编译工具 8. 编译工程 nearlink_dk_3863 设置编译产品 编译 制品存放路径…...
MongoDB数据建模小案例
MongoDB数据建模小案例 朋友圈评论内容管理 需求 社交类的APP需求,一般都会引入“朋友圈”功能,这个产品特性有一个非常重要的功能就是评论体系。 先整理下需求: 这个APP希望点赞和评论信息都要包含头像信息: 点赞列表,点赞用户的昵称,头像;评论列表,评论用户的昵称…...

MySQL(库的操作)
目录 1. 创建数据库 2. 删除数据库 3. 查看数据库 4. 修改数据库 5. 备份和恢复 6. 查看连接情况 1. 创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] 1. 大写的是关键字 2. [ ]可带可不带 3. db_name 数据…...

【55 Pandas+Pyecharts | 实习僧网Python岗位招聘数据分析可视化】
文章目录 🏳️🌈 1. 导入模块🏳️🌈 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 去除重复数据2.4 调整部分城市名称 🏳️🌈 3. Pyecharts数据可视化3.1 招聘数量前20岗位3.2 各城市招聘数量3…...
java中23种设计模式的优缺点
文兴一言 设计模式分为创建型模式、结构型模式和行为型模式。以下是每种设计模式及其优缺点的详细介绍: 一、创建型模式 简单工厂模式 优点:通过一个共同的工厂类来创建对象,将对象的创建逻辑封装在一个地方,客户端只需要与工厂…...

【JavaEE】多线程(7)
一、JUC的常见类 JUC→java.util.concurrent,放了和多线程相关的组件 1.1 Callable 接口 看以下从计算从1加到1000的代码: public class Demo {public static int sum;public static void main(String[] args) throws InterruptedException {Thread …...

如何高效的向AI大模型提问? - 提示工程Prompt Engineering
大模型的输入,决定了大模型的输出,所以一个符合要求的提问Prompt起到关键作用。 以下是关于提示工程Prompt Engineering主要方法的详细表格,包括每种方法的优点、缺点、应用场景以及具体示例: 主要方法优点缺点应用场景示例明确性…...

4K高清壁纸网站推荐
1. Awesome Wallpapers 官网: https://4kwallpapers.com/ 主题: 创意、摄影、人物、动漫、绘画、视觉 分辨率: 4K Awesome Wallpapers 提供了丰富的高质量图片,分为通用、动漫、人物三大类,可以按屏幕比例和分辨率检索,满足你对壁纸的各种…...

EasyExcel注解使用
上接《Springboot下导入导出excel》,本篇详细介绍 EasyExcel 注解使用。 1. ExcelProperty value:指定写入的列头,如果不指定则使用成员变量的名字作为列头;如果要设置复杂的头,可以为value指定多个值orderÿ…...

Visual Basic 6 关于应用的类库 - 开源研究系列文章
上次整理VB6的原来写的代码,然后遇到了关于应用窗体的显示问题。VB6不比C#,能够直接反射调用里面的方法,判断是否显示关于窗体然后显示。以前写过一个VB6插件的例子,不过那个源码不在,所以就找了度娘,能够象…...

C#泛型
泛型是一种非常强大的特性,它允许程序员编写灵活的代码,同时保持类型安全。泛型的核心思想是允许类或方法在定义时不指定具体的数据类型,而是在实际使用时指定。这意味着你可以创建一个可以与任何数据类型一起工作的类或方法 泛型类通过在类…...

go语言的成神之路-标准库篇-fmt标准库
目录 一、三种类型的输出 print: println: printf: 总结: 代码展示: 二、格式化占位符 %s:用于格式化字符串。 %d:用于格式化整数。 %f:用于格式化浮点数。 %v࿱…...
React Native的router解析
写在前面 React Native(简称RN)是一个由Facebook开发的开源框架,用于构建跨平台的移动应用程序。在RN中,路由(router)是非常重要的概念,它允许我们在不同的屏幕之间进行导航和切换。 以下是RN…...

Linux update-alternatives 命令详解
1、查看所有候选项 sudo update-alternatives --list (java筛选sudo update-alternatives --list java) 2、更换候选项 sudo update-alternatives --config java 3、自动选择优先级最高的作为默认项 sudo update-alterna…...

【踩坑】修复报错libcurl.so.4、LIBFFI_BASE_7.0、libssl.so.3
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ libcurl.so.4: sudo apt install curl -y LIBFFI_BASE_7.0: conda install libffi3.3 -y libssl.so.3: sudo apt install -y openssl li…...
python网络爬虫基础:html基础概念与遍历文档树
开始之前导入html段落,同时下载好本节将用到的库。下载方式为:pip install beautifulsoup4 一点碎碎念:为什么install后面的不是bs4也不是BeautifulSoup? html_doc """ <html><head><title>The…...

【已解决】MacOS上VMware Fusion虚拟机打不开的解决方法
在使用VMware Fusion时,不少用户可能会遇到虚拟机无法打开的问题。本文将为大家提供一个简单有效的解决方法,只需删除一个文件,即可轻松解决这一问题。 一、问题现象 在MacOS系统上,使用VMware Fusion运行虚拟机时,有…...

经典视觉神经网络1 CNN
一、概述 输入的图像都很大,使用全连接网络的话,计算的代价较高,图像也很难保留原本特征。 卷积神经网络(Convolutional Neural Network,CNN)是一种专门用于处理具有网格状结构数据的深度学习模型。主要应用…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...