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调用微信公众平台接口操作示例
Jul 08 Python
python合并已经存在的sheet数据到新sheet的方法
Dec 11 Python
python os模块简单应用示例
May 23 Python
python如何将多个PDF进行合并
Aug 13 Python
Python3 无重复字符的最长子串的实现
Oct 08 Python
python利用百度云接口实现车牌识别的示例
Feb 21 Python
jupyter实现重新加载模块
Apr 16 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
Aug 07 Python
如何利用python读取micaps文件详解
Oct 18 Python
Python命令行参数定义及需要注意的地方
Nov 30 Python
python利用pandas分析学生期末成绩实例代码
Jul 09 Python
5道关于python基础 while循环练习题
Nov 27 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
删除无限级目录与文件代码共享
2006/07/12 PHP
php魔术变量用法实例详解
2014/11/13 PHP
基于php实现的验证码小程序
2016/12/13 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
2017/05/04 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
2014/05/29 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
javascript实现回车键提交表单方法总结
2015/01/10 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
js友好的时间返回函数
2016/08/24 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
Bootstrap table使用方法汇总
2017/11/17 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
puppeteer库入门初探
2019/01/09 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
[55:39]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第二场 1月19日
2021/03/11 DOTA
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
python实现扫雷小游戏
2020/04/24 Python
利用python如何实现猫捉老鼠小游戏
2020/12/04 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
Html5之自定义属性(data-,dataset)
2019/11/19 HTML / CSS
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
幼儿园老师辞职信
2014/01/20 职场文书
优秀员工评优方案
2014/06/13 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
python3操作redis实现List列表实例
2021/08/04 Python
vue中div禁止点击事件的实现
2022/04/02 Vue.js