Python爬取网页数据

article/2025/10/22 16:13:14

都说python爬网页数据方便,我们今天就来试试,python爬取数据到底有多方便


简介

爬取数据,基本都是通过网页的URL得到这个网页的源代码,根据源代码筛选出需要的信息

准备

IDE:pyCharm
库:requests、lxml

大概介绍一下,这俩库主要为我们做什么服务的
requests:获取网页源代码
lxml:得到网页源代码中的指定数据

言简意赅有没有 ^_^

搭建环境

这里的搭建环境,可不是搭建python的开发环境,这里的搭建环境是指,我们使用pycharm新建一个python项目,然后弄好requests和lxml
新建一个项目:

光溜溜的啥也没有,新建个src文件夹再在里面直接新建一个Test.py吧

依赖库导入
我们不是说要使用requests吗,来吧
由于我们使用的是pycharm,所以我们导入这两个库就会显的格外简单,如图:
这里写图片描述
Test.py中输入:

import requests

这个时候,requests会报红线,这时候,我们将光标对准requests,按快捷键:alt + enter,pycharm会给出解决之道,这时候,选择install package requests,pycharm就会自动为我们安装了,我们只需要稍等片刻,这个库就安装好了。lxml的安装方式同理.

将这两个库安装完毕后,编译器就不会报红线了

接下来进入快乐的爬虫时间

获取网页源代码

之前我就说过,requests可以很方便的让我们得到网页的源代码
网页就拿我的博客地址举例好了:https://blog.csdn.net/it_xf?viewmode=contents
获取源码:

# 获取源码
html = requests.get("https://blog.csdn.net/it_xf?viewmode=contents")
# 打印源码
print html.text

代码就是这么简单,这个html.text便是这个URL的源码

获取指定数据

现在我们已经得到网页源码了,这时就需要用到lxml来来筛选出我们所需要的信息
这里我就以得到我博客列表为例

首先我们需要分析一下源码,我这里使用的是chrome浏览器,所以右键检查,便是这样一份画面:
这里写图片描述
然后在源代码中,定位找到第一篇
像这样?
这里写图片描述
操作太快看不清是不是?
我这里解释一下,首先点击源码页右上角的箭头,然后在网页内容中选中文章标题,这个时候,源码会定位到标题这里,
这时候选中源码的标题元素,右键复制如图:

得到xpath,嘿嘿,知道这是什么吗,这个东西相当于地址。比如网页某长图片在源码中的位置,我们不是复制了吗,粘贴出来看看长啥样

//*[@id="mainBox"]/main/div[2]/div[1]/h4/a

这里给你解释解释:

// 定位根节点
/ 往下层寻找
提取文本内容:/text()
提取属性内容:/@xxxx

后面两个我们还没有在这个表达式见过,待会说,先摆张图放出来

表达式://*[@id="mainBox"]/main/div[2]/div[1]/h4/a
我们来琢磨琢磨,首先,//表示根节点,也就是说啊,这//后面的东西为根,则说明只有一个啊
也就是说,我们需要的东西,在这里面
然后/表示往下层寻找,根据图片,也显而易见,div -> main -> div[2] -> div[1] -> h4 -> a
追踪到a这里,我想,你们应该也就看得懂了,然后我们在后面加个/text,表示要把元素的内容提取出来,所以我们最终的表达式长这样:

//*[@id="mainBox"]/main/div[2]/div[1]/h4/a/text()

这个表达式只针对这个网页的这个元素,不难理解吧?
那么这个东西怎么用呢?
所有代码:

import requests
from lxml import etreehtml = requests.get("https://blog.csdn.net/it_xf?viewmode=contents")
# print html.textetree_html = etree.HTML(html.text)
content = etree_html.xpath('//*[@id="mainBox"]/main/div[2]/div[1]/h4/a/text()')
for each in content:print(each)

这时候,each里面的数据就是我们想要得到的数据了
打印结果:

如何撸一个ArrayList      

打印结果却是这个结果,我们把换行和空格去掉

import requests
from lxml import etreehtml = requests.get("https://blog.csdn.net/it_xf?viewmode=contents")
# print html.textetree_html = etree.HTML(html.text)
content = etree_html.xpath('//*[@id="mainBox"]/main/div[2]/div[1]/h4/a/text()')for each in content:replace = each.replace('\n', '').replace(' ', '')if replace == '\n' or replace == '':continueelse:print(replace)

打印结果:

如何撸一个ArrayList 

相当nice,那么,如果我们要得到所有的博客列表呢
看图看表达式分析大法

表达式://*[@id="mainBox"]/main/div[2]/div[1]/h4/a/text()
其实我们能够很容易发现,main->div[2]其实包含所有文章,只是我们取了main->div[2]->div[1],也就是说我们只是取了第一个而已。所以,其实表达式写出这样,就可以得到所有的文章了

//*[@id="mainBox"]/main/div[2]/div/h4/a/text()

再来一次:

import requests
from lxml import etreehtml = requests.get("https://blog.csdn.net/it_xf?viewmode=contents")
# print html.textetree_html = etree.HTML(html.text)
content = etree_html.xpath('//*[@id="mainBox"]/main/div[2]/div/h4/a/text()')for each in content:replace = each.replace('\n', '').replace(' ', '')if replace == '\n' or replace == '':continueelse:print(replace)

打印结果:

如何撸一个ArrayList
Android相机屏幕适配
Tinker关于clean后准基包消失的解决方案
Tinker使用指南
git分支的使用
如何将Androidstudio中的项目导入到第三方的git托管库中
遍历矩阵
从矩阵中取出子矩阵
AndroidStudio配置OpenCV
一步一步了解handler机制
Android常用框架
Android绘制波浪线
RxJava系列教程之线程篇(五)
RxJava系列教程之过滤篇(四)
RxJava系列教程之变换篇(三)
RxJava系列教程之创建篇(二)
RxJava系列教程之介绍篇(一)
一个例子让你彻底理解java接口回调
SharedPreferences的用法及指南
异步加载网络图片带进度
VideoView加载闪黑屏
android视频播放vitamio的简单运用
仿网易新闻分类刷新
ListViewCheckBox简单实现批量删除
Android如何高效加载大图
Android聊天界面实现方式
抽屉侧滑菜单Drawerlayout-基本使用方法
android-引导页的实现方式
Java设计模式--工厂模式的自述
javaweb学习路线
getWindow().setFlags()使用说明书
歪解Activity生命周期-----初学者彻底理解指南

相当nice,我们得到了所有的文章列表。

总结

我们用到了requests获取网页列表,用lxml筛选数据,可以看出python用来在网页上爬取数据确实方便不少,chrome也支持直接在源码中得到表达式xpath,这两个库的内容肯定不止这一点点,还有很多功能等着你们去挖掘。对了,其中在写这篇博客的同时,我发现了一个很重要的问题:我的文章写的太少啦!【逃】


http://chatgpt.dhexx.cn/article/eROH0d8C.shtml

相关文章

Python爬虫爬取数据

我是Python小白,我会用比较通俗易懂的方法告诉你如何去爬取数据。 一开始,我们需要pycharm(也就是我们编代码的工具),其次我们需要打开我们需要爬取数据的网页,我以鞋子为例。 那么,接下来就开…

如何使用Python爬虫抓取数据?

Python爬虫应用十分广泛,无论是各类搜索引擎,还是日常数据采集,都需要爬虫的参与。其实爬虫的基本原理很简单,今天小编就教大家如何使用Python爬虫抓取数据,感兴趣的小伙伴赶紧看下去吧! 工具安装 首先需要…

Python爬虫:高效采集数据的几种方法

作为互联网时代的新生力量,爬虫技术已经成为了各行各业不可或缺的一环。那么,如何高效地获取网络数据呢?本文将从以下十个方面逐步分析讨论。 一、基于HTTP协议的爬虫 HTTP协议是目前互联网上使用最广泛的协议,基于此协议的爬虫…

unity3d 收费模式_unity3d中的访客模式

unity3d 收费模式 抽象 (Abstract) Game development as a discipline is challenging on its own compared to traditional software development. The ability to solve performance-related, architectural and other challenges is often the key to success in the field.…

狼人杀微信小程序项目实例(附源码)

一、项目展示 狼人杀是一款多人参与的,通过语言描述推动、较量口才和分析判断能力的策略类桌面游戏 玩家人数适于4-18人参与 主要角色有:狼人 、预言家 、平民 、女巫 、猎人 、白痴 、守卫 、骑士等 同时还有众多的玩家形象 各角色的职能介绍 设置游戏…

python获取游戏窗口_python中pygame针对游戏窗口的显示方法实例分析(附源码)

本文实例讲述了python中pygame针对游戏窗口的显示方法。分享给大家供大家参考,具体如下: 在这篇教程中,我将给出一个demo演示: 当我们按下键盘的‘f’键的时候,演示的窗口会切换到全屏显示和默认显示两种显示模式 并且在后台我们可以看到相关的信息输出: 上面给出了一个简…

unity3d之按秒倒计时

image.png 按秒倒计时 自定义变量计时 在程序中定义变量来累计时间。 实例代码 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class textTimer : MonoBehaviour {// Start is called before the first frame …

【开发工具】如何使用JetBrains Rider更好的开发Unity程序

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群:1040082875 一、前言 JetBrains Rider是一款快速强大的C#编辑器,也就是俗称的IDE。有2500多项的智能代码检查与重构,更加迅速编写和零误差的代码。完美集成与Unity…

Unity制作类胡闹厨房游戏 KitchenChaos 笔记整理

本文章是油管上CodeMonkey的一个unity项目KitchenChaos的笔记整理,学习并整理这个项目主要是因为终于看到了一个比较完整地用到了unity的各种功能、风格较为清爽的、代码结构清晰的同时比较新的项目。在学习之后也确实有很大的收获,首先通过该教程第一次…

unity python热更新_Unity C#热更新方案 ILRuntime学习笔记(一) Hello World

一、ILRuntime介绍 问:什么是热更新? 答:软件在使用时就能实现更新的方式就叫做热更新。热更新无需用户重新下载安装或重启,在使用时即可更新,方便快捷体验良好。 问:什么是ILRuntime? 答:ILRuntime是一个…

基于mediapipe的动作捕捉和Unity的球棍模型同步

基于mediapipe的动作捕捉和Unity的球棍模型同步 所需环境python端unity端效果 所需环境 这是我所使用的环境 python3.9 安装mediapipe和opencv-python包 python和Unity通信使用socket Unity2021.3 python端 如何安装那两个包我就不说了,大家有不明白可以去百度 m…

unity 原型_使用Unity和React快速进行原型制作

unity 原型 Web applications are great way to quickly reach a lot of users without the hassle of native client installs and play store downloads. Web frameworks such as React allow page components to communicate and respond to user interaction much like tra…

使用 命令行/WinForm 来打包Unity可执行程序

使用 命令行/WinForm 来打包Unity可执行程序 前言一、编辑Editor打包工具1.编辑打包脚本2.Unity编辑器中样式 二、命令行调用Unity打包函数1.Unity命令行常用参数2.命令行调用静态打包函数 三、使用WinForm创建可视化操作界面1.可视化界面2.代码详细:①CmdHelper类&…

Unity + Jenkins自动打包 (二)构建Jenkins项目以及编写Python、Unity脚本

1、新建Jenkens项目 在上一篇中,完成了Jenkins的安装和初始化,以及权限设置。 查看上一篇:Jenkins安装 点此 现在打开浏览器,输入http://localhost:8081,当然,需要改成你自己设置的Jenkins端口号&#xff…

unity python服务器_Unity如何连接服务器: 一个简单的例子

Unity3D本身是用来做客户端的通用游戏引擎, 要建立网络连接的话, 其实需要使用的是C#本身的网络和线程模块, 即System.Net.Sockets & System.Threading. 本文中我做了一个简单的例子, 适合那些需要做Unity客户端连接服务器功能的人入门. 整体项目 客户端: 我做的项目主要是…

unity + python socket通信,自定义数据包

unity和python相互之间通过socket通信来发送自定义数据包是一个利用unity构建场景和通过python来做数据处理的方式,能够有效的利用两种不同语言的优势。 我已经将对应的操作封装为对应的一个模块,SocketTools.cs,我们先来看一下具体的代码用…

假设电话收费标准为: (1)国际长途1.00元/分钟,(2) 国内长途0.60元/分钟,(3)市话前3分钟0.20元,3分钟以后0.10元/分钟。现假设某话单文件中每条话单包含如下信息:通话日期(10

你好,帮我做个C语言题目 你好,我是Assistant。很高兴为您做题。 请提供题目的完整题面,并提供任何相关的输入、输出、约束条件等信息。 如果您有任何其他问题,请随时与我联系。我将竭诚为您服务。 897354667qq.com 假设电话收…

电商用户行为数据分析实战(MySQL +PowerBI)

目录 一、项目概况二、数据源三、数据清洗3.1 选择子集导入,匹配适合的数据类型3.2 列重命名3.3重复值处理3.4 缺失值处理3.5 异常值处理从timestamps字段中提取日期数据列查看日期列数据异常情况 四、数据分析4.1 整体购物情况,基于AARRR模型4.1.1 各字…

【业务数据分析】——十大常用数据分析方法

🤵‍♂️ 个人主页:Lingxw_w的个人主页 ✍🏻作者简介:计算机科学与技术研究生在读 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 &#x1f4a…

基于订单的数据分析

目录 项目背景 数据理解 指标维度 指标梳理 维度梳理 导入数据 数据预处理 数据格式整理 规范字段名 增加字段 简化地址 缺失值处理 异常值分析​ 重复值处理 数据分析 描述性统计 总体销售情况 周趋势、日趋势分析 产品价格分析 地区分析 转化率分析 总结…