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之传说中的函数编写条规
Oct 11 Python
django1.11.1 models 数据库同步方法
May 30 Python
Django跨域请求问题的解决方法示例
Jun 16 Python
django session完成状态保持的方法
Nov 27 Python
Pandas之Dropna滤除缺失数据的实现方法
Jun 25 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
Python底层封装实现方法详解
Jan 22 Python
python异常处理、自定义异常、断言原理与用法分析
Mar 23 Python
基于python连接oracle导并出数据文件
Apr 28 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
python调用百度API实现人脸识别
Nov 17 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
Apr 07 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可变变量学习小结
2015/11/29 PHP
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
2010/10/29 Javascript
小试JQuery的AutoComplete插件
2011/05/04 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
python logging.info在终端没输出的解决
2020/05/12 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
AJAX的优缺点都有什么
2015/08/18 面试题
自荐信格式范文
2013/10/07 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
财务整改报告范文
2014/11/05 职场文书
教师个人年终总结
2015/02/11 职场文书
周恩来的四个昼夜观后感
2015/06/03 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
教你如何用cmd快速登录服务器
2022/06/10 Servers
如何利用python实现Simhash算法
2022/06/28 Python