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 字符串操作方法大全
Mar 11 Python
Python实现抓取页面上链接的简单爬虫分享
Jan 21 Python
Python中实现结构相似的函数调用方法
Mar 10 Python
python实现多线程网页下载器
Apr 15 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
Python实战购物车项目的实现参考
Feb 20 Python
python3实现猜数字游戏
Dec 07 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
Jan 06 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
Jun 02 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 Python
python xlwt模块的使用解析
Apr 13 Python
python中使用 unittest.TestCase单元测试的用例详解
Aug 30 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
Codeigniter注册登录代码示例
2014/06/12 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
Tab页界面,用jQuery及Ajax技术实现
2009/09/21 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
详解javascript脚本何时会被执行
2021/02/05 Javascript
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
python中的__slots__使用示例
2015/02/26 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
python实现泊松图像融合
2018/07/26 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
python变量命名的7条建议
2019/07/04 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
QML使用Python的函数过程解析
2019/09/26 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
python3 配置logging日志类的操作
2020/04/08 Python
Python如何根据时间序列数据作图
2020/05/12 Python
H5页面适配iPhoneX(就是那么简单)
2019/12/02 HTML / CSS
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
五年级音乐教学反思
2014/02/06 职场文书
2014年教研工作总结
2014/12/06 职场文书
2019幼儿教师求职信(3篇)
2019/09/20 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
详解Spring Boot使用系统参数表提升系统的灵活性
2021/06/30 Java/Android
详解JavaScript中Arguments对象用途
2021/08/30 Javascript
Python 数据可视化之Matplotlib详解
2021/11/02 Python
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA
DE1107机评
2022/04/05 无线电