python抓取网页数据( requests的安装方式.3.1-3)

优采云 发布时间: 2021-12-30 15:02

  python抓取网页数据(

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就是这个URL的源码

  获取指定数据

  现在我们有了网页的源代码,我们需要使用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

  追踪到这里,我想你应该明白了,然后我们在最后加上/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人工客服


线