Python网页解析库:用requests-html爬取网页

Python网页解析库:用requests-html爬取网页,第1张

Python 中可以进行网页解析的库有很多,常见的有 BeautifulSoup 和 lxml 等。在网上玩爬虫的文章通常都是介绍 BeautifulSoup 这个库,我平常也是常用这个库,最近用 Xpath 用得比较多,使用 BeautifulSoup 就不大习惯,很久之前就知道 Reitz 大神出了一个叫 Requests-HTML 的库,一直没有兴趣看,这回可算歹着机会用一下了。

使用 pip install requests-html 安装,上手和 Reitz 的其他库一样,轻松简单:

这个库是在 requests 库上实现的,r 得到的结果是 Response 对象下面的一个子类,多个一个 html 的属性。所以 requests 库的响应对象可以进行什么 *** 作,这个 r 也都可以。如果需要解析网页,直接获取响应对象的 html 属性:

不得不膜拜 Reitz 大神太会组装技术了。实际上 HTMLSession 是继承自 requestsSession 这个核心类,然后将 requestsSession 类里的 requests 方法改写,返回自己的一个 HTMLResponse 对象,这个类又是继承自 requestsResponse,只是多加了一个 _from_response 的方法来构造实例:

之后在 HTMLResponse 里定义属性方法 html,就可以通过 html 属性访问了,实现也就是组装 PyQuery 来干。核心的解析类也大多是使用 PyQuery 和 lxml 来做解析,简化了名称,挺讨巧的。

元素定位可以选择两种方式:

方法名非常简单,符合 Python 优雅的风格,这里不妨对这两种方式简单的说明:

定位到元素以后势必要获取元素里面的内容和属性相关数据,获取文本:

获取元素的属性:

还可以通过模式来匹配对应的内容:

这个功能看起来比较鸡肋,可以深入研究优化一下,说不定能在 github 上混个提交。

除了一些基础 *** 作,这个库还提供了一些人性化的 *** 作。比如一键获取网页的所有超链接,这对于整站爬虫应该是个福音,URL 管理比较方便:

内容页面通常都是分页的,一次抓取不了太多,这个库可以获取分页信息:

结果如下:

通过迭代器实现了智能发现分页,这个迭代器里面会用一个叫 _next 的方法,贴一段源码感受下:

通过查找 a 标签里面是否含有指定的文本来判断是不是有下一页,通常我们的下一页都会通过 下一页 或者 加载更多 来引导,他就是利用这个标志来进行判断。默认的以列表形式存在全局: ['next','more','older'] 。我个人认为这种方式非常不灵活,几乎没有扩展性。 感兴趣的可以往 github 上提交代码优化。

也许是考虑到了现在 js 的一些异步加载,这个库支持 js 运行时,官方说明如下:

使用非常简单,直接调用以下方法:

第一次使用的时候会下载 Chromium,不过国内你懂的,自己想办法去下吧,就不要等它自己下载了。render 函数可以使用 js 脚本来 *** 作页面,滚动 *** 作单独做了参数。这对于上拉加载等新式页面是非常友好的。

Dim MyClient As WebClient = New WebClient

Dim MyReader As New SystemIOStreamReader(MyClientOpenRead(url), SystemTextEncodingDefault) '定义新的文件流并读取网页文件数据,url表示需要打开的网页地址

Dim longTxt As String = MyReaderReadToEnd 'longtxt存储了网页的源码

MyReaderClose()

js获取网页的字符串是通过input的id获取的。

举例:

getStr就是一个获取网页字符串的函数,传入id就可以了。

<script type="text/javascript">

/

string 字符串;

str 指定字符;

split(),用于把一个字符串分割成字符串数组;

split(str)[0],读取数组中索引为0的值(第一个值),所有数组索引默认从0开始;

/

function getStr(string,str){

var str_before = stringsplit(str)[0];

var str_after = stringsplit(str)[1];

alert('前:'+str_before+' - 后:'+str_after);

}

</script>

<input type="button" onClick="getStr('string','r');" value="获取值" />

dreamweaver+ASP

ASP时间函数其参数含义

now() 获取当前日期和时间

date()获取当前年月日

year(date)获取给定日期的年份

month(date)取得给定日期的月份

day(date)取得给定日期是几号

给你举个例:

如,你想动态输出你好今天是某年某月某日那么它的代码就以下:

<% responsewrite "你好,今天是"&year(now())&"年"&month(now())&"月"&day(now())&"日" %>

这个一般使用再网站页面问候语上

稍微说一下背景,当时我想研究蛋白质与小分子的复合物在空间三维结构上的一些规律,首先得有数据啊,数据从哪里来?就是从一个涵盖所有已经解析三维结构的蛋白质-小分子复合物的数据库里面下载。这时候,手动一个个去下显然是不可取的,我们需要写个脚本,能从特定的网站选择性得批量下载需要的信息。python是不错的选择。

import urllib #python中用于获取网站的模块

import urllib2, cookielib

有些网站访问时需要cookie的,python处理cookie代码如下:

cj = cookielibCookieJar ( )

opener = urllib2build_opener( urllib2>

本文承接上面两篇,本篇中的示例要调用到前两篇中的函数,做一个简单的URL采集。一般php采集网络数据会用file_get_contents、file和cURL。不过据说cURL会比file_get_contents、file更快更专业,更适合采集。今天就试试用cURL来获取网页上的所有链接。示例如下:

<php

/

使用curl 采集hao123com下的所有链接。

/

include_once('functionphp');

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, '>

这是请求报头中的Accept-Language的关系了。

这样一来,你只是使用file_get_contents函数就实现不了这个功能了。

能够模拟浏览器发送各种报头,甚至是登录用cookie的扩展有不少,Curl就是其中之一。

你需要去网上去寻找相关的文章仔细了解一番,再做打算:

下面是PHP官网关于CURL扩展的手册:

Client URL Library>

以上就是关于Python网页解析库:用requests-html爬取网页全部的内容,包括:Python网页解析库:用requests-html爬取网页、vb.net中如何利用api函数获取网页源代码、js获取网页中的字符串等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9302870.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存