网页 抓取 innertext 试题( requests的安装方式.3.1-3)

优采云 发布时间: 2021-09-26 21:00

  网页 抓取 innertext 试题(

requests的安装方式.3.1-3)

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

简介

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

准备

  IDE:pyCharm <br /> 库:requestslxml

  大概介绍一下,这俩库主要为我们做什么服务的 <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 -&gt; main -&gt; div[2] -&gt; div[1] -&gt; h4 -&gt; 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(&#39;//*[@id="mainBox"]/main/div[2]/div[1]/h4/a/text()&#39;)

for each in content:

print(each)

  这时候每个里面的数据就是我们想要得到的数据

  打印结果:

  

如何撸一个ArrayList

  打印结果就是这个结果,我们去掉了换行符和空格

  打印结果:

  如何撸一个ArrayList

  非常好,如果我们想获得所有博客的列表怎么办

  看图看表情分析大法

  

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

  其实我们很容易发现main-&gt;div[2]其实收录了所有的文章,但是我们取的是main-&gt;div[2]-&gt;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(&#39;//*[@id="mainBox"]/main/div[2]/div/h4/a/text()&#39;)

for each in content:

replace = each.replace(&#39;\n&#39;, &#39;&#39;).replace(&#39; &#39;, &#39;&#39;)

if replace == &#39;\n&#39; or replace == &#39;&#39;:

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。这两个库的内容肯定不止这些。此时,还有很*敏*感*词*等着你去探索。对了,在写这个博客的时候,发现了一个很重要的问题:我的文章写的太少了!【逃脱】

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线