Python爬虫工具requests-html使用解析


Posted in Python onApril 29, 2020

使用Python开发的同学一定听说过Requsts库,它是一个用于发送HTTP请求的测试。如比我们用Python做基于HTTP协议的接口测试,那么一定会首选Requsts,因为它即简单又强大。现在作者Kenneth Reitz 又开发了requests-html 用于做爬虫。

该项目从3月上线到现在已经7K+的star了!

GiHub项目地址:

https://github.com/kennethreitz/requests-html

requests-html 是基于现有的框架 PyQuery、Requests、lxml、beautifulsoup4等库进行了二次封装,作者将Requests设计的简单强大的优点带到了该项目中。

安装:

 pip install requests-html

教程与使用:

使用GET请求 https://python.org 网站。

先来看看requests的基本使用。

from requests_html import HTMLSession
session = HTMLSession()

r = session.get('https://python.org/')

# 获取页面上的所有链接。
all_links = r.html.links
print(all_links)

# 获取页面上的所有链接,以绝对路径的方式。
all_absolute_links = r.html.absolute_links
print(all_absolute_links)

作为一个IT技术人员,是不是要时时关心一下科技圈的新闻,上博客园新闻频道,抓取最新的推荐新闻。

from requests_html import HTMLSession
session = HTMLSession()
r = session.get("https://news.cnblogs.com/n/recommend")
# 通过CSS找到新闻标签
news = r.html.find('h2.news_entry > a')
for new in news:
  print(new.text) # 获得新闻标题
  print(new.absolute_links) # 获得新闻链接

执行结果:

雷军:小米硬件综合净利率永远不超5%!
{'https://news.cnblogs.com/n/595156/'}
苦大仇深的“中国芯”,不妨学一学有趣的树莓派
{'https://news.cnblogs.com/n/595143/'}
我的快递,凭什么不能给我送到家!
{'https://news.cnblogs.com/n/595087/'}
倪光南回应方舟CPU失败论:企业失败不等于技术失败
{'https://news.cnblogs.com/n/595102/'}
清华大学突破纪录:首次实现25个量子接口间量子纠缠
{'https://news.cnblogs.com/n/595103/'}
定向免流量套餐用着爽,但背后的“坑”你可能不知道
{'https://news.cnblogs.com/n/595061/'}
你在微信群侃大山,有人却用微信群发大财
{'https://news.cnblogs.com/n/595059/'}
马云的三观
{'https://news.cnblogs.com/n/595047/'}
美国科技强大的全部秘密
{'https://news.cnblogs.com/n/595043/'}
盖茨看着听证会上的扎克伯格:满眼都是20年前的自己
{'https://news.cnblogs.com/n/595025/'}
史上最清晰癌细胞转移3D影像来袭
{'https://news.cnblogs.com/n/595019/'}
中兴员工:华为仅部分芯片自己设计 谁被美制裁都得死
{'https://news.cnblogs.com/n/594967/'}
作为曾经的华为员工,我想替中兴公司说两句公道话
{'https://news.cnblogs.com/n/594962/'}
匿名网友回评梁宁:方舟bug无数 贴钱给别人都未必用
{'https://news.cnblogs.com/n/594932/'}
一段关于国产芯片和操作系统的往事
{'https://news.cnblogs.com/n/594900/'}
芯片股总市值低于美国巨头 有公司靠政府补助盈利
{'https://news.cnblogs.com/n/594902/'}
被自家律师送上“枪口”的“二流”中兴
{'https://news.cnblogs.com/n/594859/'}
Google正在失去DeepMind?
{'https://news.cnblogs.com/n/594853/'}

扩展:我们可以进一步将这里数据做持久化处理,设计出自己的“头条”。

接下来我们到网站上下载壁纸,以美桌网(www.win4000.com)为例。

from requests_html import HTMLSession
import requests


# 保存图片到bg/目录
def save_image(url, title):
  img_response = requests.get(url)
  with open('./bg/'+title+'.jpg', 'wb') as file:
    file.write(img_response.content)

# 背景图片地址,这里选择1920*1080的背景图片
url = "http://www.win4000.com/wallpaper_2358_0_10_1.html"

session = HTMLSession()
r = session.get(url)

# 查找页面中背景图,找到链接,访问查看大图,并获取大图地址
items_img = r.html.find('ul.clearfix > li > a')
for img in items_img:
  img_url = img.attrs['href']
  if "/wallpaper_detail" in img_url:
    r = session.get(img_url)
    item_img = r.html.find('img.pic-large', first=True)
    url = item_img.attrs['src']
    title = item_img.attrs['title']
    print(url+title)
    save_image(url, title)

这个网站上的图片还是很容易获取的,在上面的代码块中我加了注释。这里不再说明。

Python爬虫工具requests-html使用解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python处理圆角图片、圆形图片的例子
Apr 25 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
Selenium 模拟浏览器动态加载页面的实现方法
May 16 Python
Python 通过调用接口获取公交信息的实例
Dec 17 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
对python中的os.getpid()和os.fork()函数详解
Aug 08 Python
pytorch 加载(.pth)格式的模型实例
Aug 20 Python
Python流程控制 if else实现解析
Sep 02 Python
Python turtle库的画笔控制说明
Jun 28 Python
python基于tkinter制作下班倒计时工具
Apr 28 Python
python中数组和列表的简单实例
Mar 25 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 #Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
Apr 29 #Python
Python通过两个dataframe用for循环求笛卡尔积
Apr 29 #Python
Django分组聚合查询实例分享
Apr 29 #Python
python中sympy库求常微分方程的用法
Apr 28 #Python
tensorflow2.0的函数签名与图结构(推荐)
Apr 28 #Python
Python startswith()和endswith() 方法原理解析
Apr 28 #Python
You might like
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
2013/06/18 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
Yaf框架封装的MySQL数据库操作示例
2019/03/06 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
js css样式操作代码(批量操作)
2009/10/09 Javascript
JavaScript prototype属性使用说明
2010/05/13 Javascript
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
Jquery 在页面加载后执行的几种方式
2014/03/14 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
解析javascript瀑布流原理实现图片滚动加载
2016/03/10 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
python基础教程项目三之万能的XML
2018/04/02 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
python语言中有算法吗
2020/06/16 Python
pytorch实现查看当前学习率
2020/06/24 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
在家更换处方镜片:Lensabl
2019/05/01 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
车间主任岗位职责
2014/03/16 职场文书
工厂仓管员岗位职责范本
2014/07/17 职场文书
行政主管岗位职责
2015/02/03 职场文书
鲁迅故里导游词
2015/02/05 职场文书
2015年乡镇平安建设工作总结
2015/05/13 职场文书
党员转正申请报告
2015/05/15 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
2019年教师节祝福语精选,给老师送上真诚的祝福
2019/09/09 职场文书