前一篇文章带大家看了Requests 库的使用,使用它发送了 GET POST 的请求,并且能自订 headers 及 cookies 等参数。
Requests 库本身不具有资料清洗的功能,需要其他工具来辅助清理,今天要介绍的 Requests-HTML 库和 Requests 同一个作者,是由 Requests 再封装的,因此它具有 Requests 的功能,并且支援资料清洗的功能。
Requests-HTML 与 Reqests 库最大的不同是,Requests-HTML 在发送请求前须先宣告 HTMLSession,之後在对这个回传的物件进行 get
post
等操作。
这个 Session 就如同打电话,只要双方都不挂断,或出现其他突发因素,通话就会一直持续。
执行以下指令便可下载 Requests-HTML。
pipenv install requests-html
使用方法与 Requests 库类似,不过要先宣告 HTMLSession。
相同地,其中 session.get
session.post
也可传入参数,Requests Headers、Proxy IP 使用、凭证验证、Timeout、Cookies 传入... ,详细使用方法能参考 【Day 07】- 听说 F12 可以拿来骇入小恐龙? (网页开发工具分析流量)。
from requests_html import HTMLSession
#宣告 Session
session = HTMLSession()
r = session.get('https://ithelp.ithome.com.tw/users/20134430/ironman/4307')
print(type(r.html))
r = session.post('https://ithelp.ithome.com.tw/users/20134430/ironman/4307', data={})
print(type(r.html))
Requests-HTML 把资料清洗的用法也包入了,下面举出大略性的清洗用法。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://ithelp.ithome.com.tw/users/20134430/ironman/4307')
# 输出网页的网址
print(r.html.url)
# 输出网页内容内的所有网址
print(r.html.links)
# 输出网页内容(HTML)
print(r.text)
# 输出网页文字内容(除去 HTML)
print(r.html.text)
到目前为止,仍然无法对需求元素进行定位。
Request-HTML 中可以使用 find()
xpath()
search()
search_all()
进行资料的定位,下面进行分开介绍。
语法: find(selector, containing, clean, first, _encoding)
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://ithelp.ithome.com.tw/users/20134430/ironman/4307')
ele = r.html.find(
'body > div.container.index-top > div > div > div.board.leftside.profile-main > div.ir-profile-content')
print(ele[0].text)
'''
2021 iThome 铁人赛
回列表
AI & Data
网路爬虫,万物皆爬 - 30 天搞懂并实战网路爬虫及应
对反爬虫技术 系列
你身为学生常在网路上或同学说网路爬虫现在很流行,
想知道这到底是甚麽?学习了 requests + beautifulsoup 爬虫,想了解更多网路爬虫技巧但缺乏实战?或是辛
辛苦苦写了一只网路爬虫,但被网页的反爬虫技术挡下
?
30 天简述多种类型网路爬虫与原理,并佐以基础知识
及实战演练。常见反爬虫技术及可行应对方案。
展开 收起
参赛天数 6 天 | 共 6 篇文章 | 5 人订阅 订阅系
列文 RSS系列文 |团队肝已经,死了
0 Like 0 留言 104 浏览
DAY 1
【Day 01】- 前言: 从 0 开始的网路爬虫
前言 近年人工智慧与大数据十分热门,其背後需要许
多有效的资料,先不论 Data Tagging 的部分,网路爬
虫是个爬取有效资料的好方法,甚至大家常用的 goo...
2021-09-16 ‧ 由 Vincent55 分享
1 Like 0 留言 83 浏览
DAY 2
【Day 02】- 网路爬虫环境设定(Python、pipenv、Vscode)
简介 各位好,在进入基本 Python 语法与本次铁人赛
主题爬虫之前。第二天的内容将会带着各位一步一步将
爬虫的环境设定好,本文将以 Window10 的环境为主...
2021-09-17 ‧ 由 Vincent55 分享
0 Like 0 留言 48 浏览
DAY 3
【Day 03】- Python 基础操作与常见资料型态(整数、
浮点数、布林值、字串、串列、元组、字典)
前情提要 在前一篇文章内容中带大家建立了 pipenv
虚拟环境,并在虚拟环境中装了套件。又安装了 Vscode ,并透过设定 venv 路径让 Vscode...
2021-09-18 ‧ 由 Vincent55 分享
0 Like 0 留言 49 浏览
DAY 4
【Day 04】- Python 条件判断与回圈
前情提要 在前一篇文章内容中带大家跑过一次 Python 中的基础操作与常见的资料型态的使用。也提供了大
家一些额外的使用方法,若有自信的读者能再去 Day3
看...
2021-09-19 ‧ 由 Vincent55 分享
0 Like 0 留言 37 浏览
DAY 5
【Day 05】- Python 字串操作(正规表达式 regexes
前情提要 前一篇文章带大家看了 Python 中的条件判
断以及回圈等语法,大家要先把这些基本语法用熟,之
後的几天会比较顺利欧。 开始之前 Day 2 有带给大家
2021-09-20 ‧ 由 Vincent55 分享
0 Like 0 留言 43 浏览
DAY 6
【Day 06】- 听说 F12 可以拿来骇入小恐龙? (网页开
发工具分析流量)
前情提要 前一篇文章带大家看了 Python 中字串的原
生操作以及正规表达式的操作,这两个对於爬虫的资料
清洗是很方便的工具,大家熟悉运用後对於各种字串处
理会更得...
2021-09-21 ‧ 由 Vincent55 分享
'''
语法: xpath(selector, clean, first, _encoding)
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://ithelp.ithome.com.tw/users/20134430/ironman/4307')
ele = r.html.xpath(
'/html/body/div[2]/div/div/div[2]/div[1]')
print(ele[0].text)
'''
2021 iThome 铁人赛
回列表
AI & Data
网路爬虫,万物皆爬 - 30 天搞懂并实战网路爬虫及应
对反爬虫技术 系列
你身为学生常在网路上或同学说网路爬虫现在很流行,
想知道这到底是甚麽?学习了 requests + beautifulsoup 爬虫,想了解更多网路爬虫技巧但缺乏实战?或是辛
辛苦苦写了一只网路爬虫,但被网页的反爬虫技术挡下
?
30 天简述多种类型网路爬虫与原理,并佐以基础知识
及实战演练。常见反爬虫技术及可行应对方案。
展开 收起
参赛天数 6 天 | 共 6 篇文章 | 5 人订阅 订阅系
列文 RSS系列文 |团队肝已经,死了
0 Like 0 留言 104 浏览
DAY 1
【Day 01】- 前言: 从 0 开始的网路爬虫
前言 近年人工智慧与大数据十分热门,其背後需要许
多有效的资料,先不论 Data Tagging 的部分,网路爬
虫是个爬取有效资料的好方法,甚至大家常用的 goo...
2021-09-16 ‧ 由 Vincent55 分享
1 Like 0 留言 83 浏览
DAY 2
【Day 02】- 网路爬虫环境设定(Python、pipenv、Vscode)
简介 各位好,在进入基本 Python 语法与本次铁人赛
主题爬虫之前。第二天的内容将会带着各位一步一步将
爬虫的环境设定好,本文将以 Window10 的环境为主...
2021-09-17 ‧ 由 Vincent55 分享
0 Like 0 留言 48 浏览
DAY 3
【Day 03】- Python 基础操作与常见资料型态(整数、
浮点数、布林值、字串、串列、元组、字典)
前情提要 在前一篇文章内容中带大家建立了 pipenv
虚拟环境,并在虚拟环境中装了套件。又安装了 Vscode ,并透过设定 venv 路径让 Vscode...
2021-09-18 ‧ 由 Vincent55 分享
0 Like 0 留言 49 浏览
DAY 4
【Day 04】- Python 条件判断与回圈
前情提要 在前一篇文章内容中带大家跑过一次 Python 中的基础操作与常见的资料型态的使用。也提供了大
家一些额外的使用方法,若有自信的读者能再去 Day3
看...
2021-09-19 ‧ 由 Vincent55 分享
0 Like 0 留言 40 浏览
DAY 5
【Day 05】- Python 字串操作(正规表达式 regexes
、原生基本操作)
前情提要 前一篇文章带大家看了 Python 中的条件判
断以及回圈等语法,大家要先把这些基本语法用熟,之
後的几天会比较顺利欧。 开始之前 Day 2 有带给大家
...
2021-09-20 ‧ 由 Vincent55 分享
0 Like 0 留言 44 浏览
DAY 6
【Day 06】- 听说 F12 可以拿来骇入小恐龙? (网页开
发工具分析流量)
前情提要 前一篇文章带大家看了 Python 中字串的原
生操作以及正规表达式的操作,这两个对於爬虫的资料
清洗是很方便的工具,大家熟悉运用後对於各种字串处
理会更得...
2021-09-21 ‧ 由 Vincent55 分享
'''
语法: search(template)
传回第一个符合 template 的字串 {} 的部分
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://ithelp.ithome.com.tw/users/20134430/ironman/4307')
# print(r.html.text)
ele = r.html.xpath(
'/html/body/div[2]/div/div/div[2]/div[1]')
print(ele[0].search('【Day {}】'), ele[0].search('【Day {}】').fixed)'''
"""
<Result ('01',) {}> ('01',)
"""
语法: search_all(template)
传回符合 template 的字串 {} 的部分
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://ithelp.ithome.com.tw/users/20134430/ironman/4307')
# print(r.html.text)
ele = r.html.xpath(
'/html/body/div[2]/div/div/div[2]/div[1]')
print(ele[0].search_all('【Day {}】'))
for day in ele[0].search_all('【Day {}】'):
print(day.fixed)
"""
[<Result ('01',) {}>, <Result ('02',) {}>, <Result ('03',) {}>, <Result ('04',) {}>, <Result ('05',) {}>, <Result ('06',) {}>]
('01',)
('02',)
('03',)
('04',)
('05',)
('06',)
"""
这边介绍一个使用 chrome 开发工具取得元素 CssSelector 及 XPath 的好用方法。
首先,先使用开发工具的选取工具选取想要的元素。
▲使用开发工具的选取工具锁定元素
接下来,在开发工具对该元素点右键,之後点选 Copy,如果要复制 CssSelector 点选 Copy selector,如果要复制 XPath 点选 Copy XPath 或 Copy full XPath。
▲使用内建功能复制 CssSelector 或 XPath
今天介绍了与 Requests 相同作者的 Requests-HTML ,多了资料清洗的功能,活用了 request-session 的功能,其他的功能与 Requests 类似。Requests-HTML 还有一些方便的功能,比如说可以很好的支援 JavaScript ,render() 用法等等可以使 Ajax ,想了解更多的读者可以看补充资料~
明天会与各位介绍另一个较多人用的资料清洗工具 BeautifulSoup
,通常会跟 Requests 做搭配使用,也是较为主流的套件组合。
Requests-HTML 库官方文件 : https://docs.python-requests.org/projects/requests-html/en/latest/
requests-html快速入门 : https://segmentfault.com/a/1190000015641160
<<: Day 08 JavaScript/Rails XHR、fetch、axios、Rails.ajax 比较
>>: #08 实作篇 — 使用 Next.js 的各种 Data Fetching 方式实作小专案 ft. Github API
Python练习题一 import qrcode import sys import os # 需要...
October 29, 2020 I’ve practiced the principle of M...
时间过得很快,记得去年这个时候刚报名前端工程师的养成班,内心充满着不安与前途未知。由於本身不是本科相...
上一篇,申请好了 line message API 的频道,这一篇就来实际玩转 line mess...
大家好!今天这篇主要是实作浏览器上的录音与录影功能,这边先列出几个会做到的目标 显示视讯画面与声音 ...