网页 抓取 innertext 试题( requests的安装方式.3.1-3)
优采云 发布时间: 2021-09-26 21:00网页 抓取 innertext 试题(
requests的安装方式.3.1-3)
<p>都说python爬网页数据方便,我们今天就来试试,python爬取数据到底有多方便
简介
爬取数据,基本都是通过网页的URL得到这个网页的源代码,根据源代码筛选出需要的信息
准备
IDE:pyCharm <br /> 库:requests、lxml
大概介绍一下,这俩库主要为我们做什么服务的 <br /> requests:获取网页源代码 <br /> lxml:得到网页源代码中的指定数据
言简意赅有没有 ^_^
搭建环境
这里的搭建环境,可不是搭建python的开发环境,这里的搭建环境是指,我们使用pycharm新建一个python项目,然后弄好requests和lxml <br /> 新建一个项目: <br />
光溜溜的啥也没有,新建个src文件夹再在里面直接新建一个Test.py吧 <br />
依赖库导入 <br /> 我们不是说要使用requests吗,来吧 <br /> 由于我们使用的是pycharm,所以我们导入这两个库就会显的格外简单,如图: <br />
<br /> 在Test.py中输入:import requests</p>
此时,请求将报告一条红线。这时候我们将光标对准requests,按快捷键:alt+enter,pycharm会给出解决方法。这时候选择安装包请求,pycharm会自动为我们安装。,我们只需要稍等片刻,库就安装好了。lxml的安装方法是一样的。
安装这两个库后,编译器不会报红线
接下来进入快乐爬行时间
获取网页源代码
前面说过,requests可以让我们很容易的拿到网页的源码
以我在网页上的博客地址为例:
获取源代码:
# 获取源码
html = requests.get("https://blog.csdn.net/it_xf?viewmode=contents")
# 打印源码
print html.text
代码就这么简单,这个html.text就是这个网址的源码
获取指定数据
现在我们有了网页的源代码,我们需要使用lxml过滤掉我们需要的信息。
这里我以我的博客列表为例
首先,我们需要分析源代码。我这里用的是chrome浏览器,所以右键查看,是这样的画面:
然后在源代码中,找到第一个
像这样?
操作太快了吧?
让我在这里解释一下。首先点击源页面右上角的箭头,然后在网页内容中选择文章标题。此时,源代码将位于此处。
这时候选中源码的title元素,右键复制,如图:
获取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 etree
html = requests.get("https://blog.csdn.net/it_xf?viewmode=contents")
# print html.text
etree_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)
这时候每个里面的数据就是我们想要得到的数据
打印结果:
如何撸一个ArrayList
打印结果就是这个结果,我们去掉了换行符和空格
打印结果:
如何撸一个ArrayList
非常好,如果我们想获得所有博客的列表怎么办
看图看表情分析大法
表达式://*[@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 etree
html = requests.get("https://blog.csdn.net/it_xf?viewmode=contents")
# print html.text
etree_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 == '':
continue
else:
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的简单运用
仿网易新闻分类刷新
ListView加CheckBox简单实现批量删除
Android如何高效加载大图
Android聊天界面实现方式
抽屉侧滑菜单Drawerlayout-基本使用方法
android-引导页的实现方式
Java设计模式--工厂模式的自述
javaweb学习路线
getWindow().setFlags()使用说明书
歪解Activity生命周期-----初学者彻底理解指南
很好,我们得到了所有的 文章 列表。
总结
我们使用 requests 来获取网页列表,并使用 lxml 过滤数据。可见,用python爬取网页数据真的很方便。Chrome 还直接在源代码中支持表达式 xpath。这两个库的内容肯定不止这些。此时,还有很*敏*感*词*等着你去探索。对了,在写这个博客的时候,发现了一个很重要的问题:我的文章写的太少了!【逃脱】