目录

requests-html

基本使用

- 获取网页

- 获取链接

- 获取元素

- xlsxwriter

示例

- 开奖结果爬虫demo

- 爬取表情包demo


requests-html

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

官方文档:

http://html.python-requests.org/

GiHub项目地址:

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

安装:

pip install requests-html

基本使用

- 获取网页

下面的代码获取了体彩页面,返回的对象r是requests.Reponse类型,更确切的说是继承自前者的requests_html.HTMLResponse类型。这里其实和requests库的使用方法差不多,获取到的响应对象其实其实也没啥用,这里的关键就在于r.html这个属性,它会返回requests_html.HTML这个类型,它是整个requests_html库中最核心的一个类,负责对HTML进行解析。我们学习requests_html这个库,其实也就是学习这个HTML类的使用方法。

from requests_html import HTMLSessionurl = "http://www.lottery.gov.cn/historykj/history_92.jspx?page=false&_ltype=dlt&termNum=0&startTerm=07001&endTerm="
session = HTMLSession()
r = session.get(url)
# 查看页面内容
print(r.html.html)

- 获取链接

linksabsolute_links两个属性分别返回HTML对象所包含的所有链接和绝对链接(均不包含锚点)。

# 获取链接
print(r.html.links)
print(r.html.absolute_links)

- 获取元素

request-html支持CSS选择器和XPATH选择器两种语法来选取HTML元素。 

CSS选择器语法,它需要使用HTML的find函数。

    def find(self, selector: str = "*", *, containing: _Containing = None, clean: bool = False, first: bool = False, _encoding: str = None) -> _Find:"""Given a CSS Selector, returns a list of:class:`Element <Element>` objects or a single one.:param selector: CSS Selector to use.:param clean: Whether or not to sanitize the found HTML of ``<script>`` and ``<style>`` tags.:param containing: If specified, only return elements that contain the provided text.:param first: Whether or not to return just the first result.:param _encoding: The encoding format.

该函数有5个参数,作用如下:

  • selector,要用的CSS选择器;
  • clean,布尔值,如果为真会忽略HTML中style和script标签造成的影响(原文是sanitize,大概这么理解);
  • containing,如果设置该属性,会返回包含该属性文本的标签;
  • first,布尔值,如果为真会返回第一个元素,否则会返回满足条件的元素列表;
  • _encoding,编码格式。

下面是几个简单的例子:

# 首页菜单文本
print(r.html.find('div#menu', first=True).text)
# 首页菜单元素
print(r.html.find('div#menu a'))
# 糗事百科段子内容
print(list(map(lambda x: x.text, r.html.find('div.content span'))))

XPath,全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言。最初是用来搜寻 XML 文档的,但同样适用于 HTML 文档的搜索。所以在做爬虫时完全可以使用 XPath 做相应的信息抽取。

    def xpath(self, selector: str, *, clean: bool = False, first: bool = False, _encoding: str = None) -> _XPath:"""Given an XPath selector, returns a list of:class:`Element <Element>` objects or a single one.:param selector: XPath Selector to use.:param clean: Whether or not to sanitize the found HTML of ``<script>`` and ``<style>`` tags.:param first: Whether or not to return just the first result.:param _encoding: The encoding format.

它有4个参数如下:

  • selector,要用的XPATH选择器;
  • clean,布尔值,如果为真会忽略HTML中style和script标签造成的影响(原文是sanitize,大概这么理解);
  • first,布尔值,如果为真会返回第一个元素,否则会返回满足条件的元素列表;
  • _encoding,编码格式。

XPath 常用规则:

XPath 的常用匹配规则示例如下:

//title[@lang='eng']

表示选择所有名称为 title,同时属性 lang 的值为 'eng' 的节点,后面会通过 Python 的 lxml 库,利用 XPath 进行 HTML 的解析。

print(r.html.xpath("//div[@id='menu']", first=True).text)
print(r.html.xpath("//div[@id='menu']/a"))
print(r.html.xpath("//div[@class='content']/span/text()"))

- xlsxwriter

xlsxwriter模块主要用来生成excel表格,插入数据、插入图标等表格操作。

示例

talk is cheap,show me the code

- 开奖结果爬虫demo

打开网页,按F12可以查看html网页源码

下面是一个简单的python爬虫代码,以爬取彩票开奖结果为例,保存到excel文件中。

import xlsxwriter
from requests_html import HTMLSessiondef main():url = "http://www.lottery.gov.cn/historykj/history_92.jspx?page=false&_ltype=dlt&termNum=0&startTerm=07001&endTerm="session = HTMLSession()r = session.get(url)# 获取期号numbers = r.html.xpath('//td[@height="23"]/text()')# 获取红球号码reds = r.html.xpath('//td[@class="red"]/text()')# 获取蓝球号码blues = r.html.xpath('//td[@class="blue"]/text()')# 新建excel表workbook = xlsxwriter.Workbook("daletou.xlsx")# 新建sheetworksheet = workbook.add_worksheet()header = ("期号", "红-1", "红-2", "红-3", "红-4", "红-5", "蓝-1", "蓝-2")worksheet.write_row(0, 0, header)for i, number in enumerate(numbers):red = reds[5 * i : 5 * i + 5]blue = blues[2 * i : 2 * i + 2]# 将数据插入到表格中,第i+1行,第1列,内容为numberworksheet.write(i + 1, 0, number)red = list(map(int, red))blue = list(map(int, blue))worksheet.write_row(i + 1, 1, red)worksheet.write_row(i + 1, 6, blue)workbook.close()session.close()if __name__ == "__main__":main()

- 爬取表情包demo

import requests
import os
from requests_html import HTMLSession# 文件保存目录
path= 'C:/workspace/data/'# 保存为.jpg格式
def save(respone,name):with open(path + name + '.jpg','wb') as f:f.write(respone)# 保存为.gif格式
def savegif(respone,name):with open(path + name + '.gif', 'wb') as f:f.write(respone)def main():# 爬取表情包图片url = "https://fabiaoqing.com/biaoqing"session = HTMLSession()r = session.get(url)# 打印网页内容 或者 按F12在浏览器上查看# print(r.html.html)# 直接定位到img标签,具体分析,获取相应的数据# print(r.html.find('img'))result = r.html.xpath('//div[@class="tagbqppdiv"]/a/img')# 下载图片for idx in range(len(result)):try:temp_result = result[idx].attrsimage_name = temp_result['title']img_url = temp_result['data-original']print('第%d个,url:%s'%(idx+1,img_url))connet = requests.get(img_url,timeout=15)# 判断文件格式if (img_url[-3:] == 'jpg'):save(connet.content, image_name)else:savegif(connet.content, image_name)except Exception as e:print(e)if __name__ == "__main__":main()

结果:

【参考】

[1] https://www.cnblogs.com/fnng/p/8948015.html

[2] https://www.jianshu.com/p/85a3004b5c06

[3] https://www.jianshu.com/p/9d60cf2d3e64

基于requests-html的python爬虫相关推荐

  1. Requests如何在Python爬虫中实现post请求 ?

    urllib库作为python基础的工具,想必大家已经学的差不多了.作为一个有理想,有抱负的小白当然要向python大神进阶.小编查询了一些资料,发现Requests库也是不错的选择.post请求和r ...

  2. 基于大数据的python爬虫的菜谱美食食物推荐系统

    众所周知,现阶段我们正处于一个"大数据"时代,从互联网上大量的数据中找到自己想要的信息变得越来困难,搜索引擎的商业化给市场带来了百度和谷歌这样的商业公司.网络爬虫便是搜索引擎的重要 ...

  3. 音乐爬取、requests库、Python爬虫

    功能简述 输入歌手姓名, 请求网页,爬取音乐,将自己喜欢的歌手的音乐全部爬取并且下载到本地 源码展示 USER_AGENT_LIST = ['Mozilla/4.0 (compatible; MSIE ...

  4. python爬虫微博关键字_微博关键词爬虫——基于requests和aiohttp

    requests库是python爬虫中最常见的库,与内置的urllib库相比,它更加简洁高效,是每一个接触爬虫者都务必要掌握的基础:但它也是有缺点的,就是不支持异步操作,虽然可以通过多线程来解决,但当 ...

  5. python爬虫用urllib还是reques,python爬虫中urllib.request和requests有什么区别?

    在学习python爬虫,想要检索request相关内容时,往往会出现urllib.request和requests这两个词,urllib.request和requests都是python爬虫的模块,其 ...

  6. python爬虫 被重定向_爬虫篇 | 认识Python最最最常用语重要的库Requests

    最近整理一个爬虫系列方面的文章,不管大家的基础如何,我从头开始整一个爬虫系列方面的文章,让大家循序渐进的学习爬虫,小白也没有学习障碍. 爬虫篇 | Python爬虫学前普及 基础篇 | Python基 ...

  7. python爬虫爬取百度贴吧图片,requests方法

    每天一点点,记录学习 近期爬虫项目,看完请点赞哦---: 1:python 爬取菜鸟教程python100题,百度贴吧图片反爬虫下载,批量下载 2:python爬虫爬取百度贴吧图片,requests方 ...

  8. 数据采集与存储案例——基于Python爬虫框架Scrapy的爬取网络数据与MySQL数据持久化

    此案例需要预先安装pymsql python3.7.4 scrapy2.7.1 一.安装scrapy框架 1.使用pip命令安装scrapy pip install scrapy 在这里下载太慢可以使 ...

  9. python爬虫小项目挣钱兼职,python程序员兼职平台

    python爬虫去哪接单 python爬虫接单的方式有两种一.接定制需求的单子爬虫定制的需求其实很多,比如 "爬取某某电商网站的评论",这类需求一般是按照爬取数据量的大小来收费,价 ...

  10. Python 爬虫十六式 - 第七式:RE:用匹配来演绎编程的艺术

    RE:用匹配来演绎编程的艺术 学习一时爽,一直学习一直爽   Hello,大家好,我是 Connor,一个从无到有的技术小白.上一次我们说到了 pyquery 今天我们将迎来我们数据匹配部分的最后一位 ...

最新文章

  1. HDFS的API操作
  2. EasyUI表单验证,自定义插件验证,自定义js插件验证,远程验证,常见手机号,中英文,qq等验证规则验证...
  3. python【数据结构与算法】表达式(前缀中缀后缀表达式)与Two fork tree
  4. python处理表格-python xlrd处理表格常用方法
  5. a链接的四个伪类顺序
  6. 什么是 ecommerce 的 distributor 概念以及如何实现 website redirect
  7. NET问答:在 Linq 查询中可以处理异常吗?
  8. 牛客网SQL篇刷题篇(3-10)
  9. 添加栏目HyperLink
  10. KETTLE调度第三篇:Windows下调度Dos脚本编写和遇到的一些问题解决
  11. 分组交换技术HDLC配置简述
  12. 在你公司Code Review是一种形式,还是一种开发文化?
  13. 支持ipv6类型的ddos测试工具thc-ipv6
  14. 控制继电器(esp32+继电器)
  15. notifier通知链机制
  16. HC32L130基于Xmodem协议实现IAP串口在线升级
  17. 超微服务器性能,读取性能强劲 超微2U机架F228服务器评测
  18. 现代软件工程 第九章 【项目经理】练习与讨论
  19. 西部数据绿盘、蓝盘、黑盘、红盘和紫盘有什么区别
  20. 第四次机考(2019) C. f1二

热门文章

  1. (目标检测)①数据集的建立(拍摄收集、数据集标注)
  2. 集成 12 种协议、可于USBC端口的快充协议芯片IP2188
  3. access2007 mysql_Access2007基础教程:开始使用Access 2007
  4. Unity Labs:AutoLOD –试验自动性能改进
  5. 页面分享到微博、qq、qqzone
  6. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
  7. 初一知识用计算机进行运算,【初一数学】必考的21个知识点!
  8. python日历函数_Python—日历函数—日历模块的常用函数,calendar,常见
  9. 自考计算机还是商务英语,自考本科报商务英语怎么样
  10. silent-interface(OSPF)接口静默