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常用模块用法分析
Sep 08 Python
跟老齐学Python之折腾一下目录
Oct 24 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
Jan 26 Python
python如何使用unittest测试接口
Apr 04 Python
python实现画一颗树和一片森林
Jun 25 Python
利用python提取wav文件的mfcc方法
Jan 09 Python
python实现多层感知器MLP(基于双月数据集)
Jan 18 Python
dataframe 按条件替换某一列中的值方法
Jan 29 Python
Python批量删除只保留最近几天table的代码实例
Apr 01 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
Apr 13 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
Dec 31 Python
python基础详解之if循环语句
Apr 24 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配置文件中最常用四个ini函数
2007/03/19 PHP
php ignore_user_abort与register_shutdown_function 使用方法
2009/06/14 PHP
php获取远程文件大小
2015/10/20 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
浅析javascript中的Event事件
2016/12/09 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
JS实现加载时锁定HTML页面元素的方法
2017/06/24 Javascript
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
Python 可爱的大小写
2008/09/06 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
python 上下文管理器使用方法小结
2017/10/10 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
python生成requirements.txt的两种方法
2019/09/18 Python
python实现微信打飞机游戏
2020/03/24 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
CSS3感应鼠标的背景闪烁和图片缩放动画效果
2014/05/14 HTML / CSS
美国综合购物商城:UnbeatableSale.com
2018/11/28 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
英语课前三分钟演讲稿(6篇)
2014/09/13 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
淮海战役观后感
2015/06/11 职场文书
公司管理制度范本
2015/08/03 职场文书
人生一定要学会的三样东西:放下、忘记、珍惜
2019/08/21 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang