Python中如何使用requests作者的新项目requests-html

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

This library intends to make parsing HTML (e.g. scraping the web) as simple and intuitive as possible.

When using this library you automatically get:

-Full JavaScript support!
-CSS Selectors (a.k.a jQuery-style, thanks to PyQuery).
-XPath Selectors, for the faint at heart.
-Mocked user-agent (like a real web browser).
-Automatic following of redirects.
-Connection – pooling and cookie persistence.
-The Requests experience you know and love, with magical parsing abilities.

对 requests 做了封装,添加了解析 html 的接口,总代码现在是 399 行,还在更新
Python中如何使用requests作者的新项目requests-html


44 回复

mark 先 star 为敬


requests-html是requests作者Kenneth Reitz开发的库,它基于requests并集成了HTML解析功能(使用pyquery),主要特点是内置了JavaScript支持(通过Pyppeteer)和更简洁的API。

基本用法示例:

from requests_html import HTMLSession

# 创建会话
session = HTMLSession()

# 发送请求并渲染JavaScript(如果需要)
r = session.get('https://example.com')
r.html.render()  # 这会启动无头浏览器执行JS

# 使用CSS选择器查找元素
links = r.html.find('a')
for link in links:
    print(link.text, link.attrs.get('href'))

# 搜索包含特定文本的元素
about_element = r.html.search('About {}')[0]

# 获取所有链接
all_links = r.html.absolute_links

关键特性:

  1. JavaScript渲染render()方法可以执行页面中的JavaScript代码
  2. CSS选择器:使用类似jQuery的语法查找元素
  3. 数据提取:内置的search()方法支持类似正则表达式的文本搜索
  4. 异步支持:可以使用AsyncHTMLSession进行异步请求

简单爬虫示例:

from requests_html import HTMLSession

session = HTMLSession()
r = session.get('https://news.ycombinator.com')
r.html.render(sleep=2)  # 等待2秒让JS执行

articles = []
for item in r.html.find('.athing'):
    title = item.find('.titleline')[0].text
    link = item.find('.titleline a')[0].attrs['href']
    articles.append({'title': title, 'link': link})

print(f"抓取了 {len(articles)} 篇文章")

注意:首次使用render()时会自动下载Chromium,这可能需要一些时间。

总结:requests-html适合需要处理JavaScript渲染页面的简单爬虫任务。

把 pyquery 和 xpath 弄进来了,还有自动 useragent,是要一统江湖的节奏

观望中,先 star

star 为敬,beautifulsoup 用着还是不够爽

今天看了一下,原来是新项目,很有希望啊

吊炸天

这个作者好腻害,好多牛逼项目

看作者就 star 系列

可以放弃 bs4 了?

期待有人封装 aiohttp

如果下载和解析分开异步进行就好了

不太明白,这个 库 用来替代谁的?

请问这个库 是 requests+bs4 吗

xxx for humans 又来了?没有 xxx 之前莫不是大家都在吃猪食 ?

大约看了下 大概类似于 requests+bs4+selenium/phantomjs 不过后面两个现在只是封装了一小部分功能 比如通过 css selector 解析或者执行 js 代码这种

你可以自己异步啊 比如用队列什么的

Only later versions of Python 3 are supported. 好评

都是实用的功能啊!

还可以解析 JS ?怎么感觉是个爬虫库了

哎呀呀呀呀?

不错不错……这个好

https://github.com/scrapy/parsel 一直用的这货,re css xpath 用起来很爽

非程序猿表示非常感兴趣。requests 太好用了,太是适合我等毫无基础的小白了,轻松上手。

看了下,安装 requests-html 同时需要 bs4,lxml 等库,估计还是依赖于这些库

恕我直言,没看懂这个库存在的意义,lxml 足够好用了,重点是 xpath 这种东西应该存在配置里,而不是把解析逻辑写在代码里

Full JavaScript Support by Chromium headless mode.

the first time you ever run the render() method, it will download Chromium …

399 行代码已经 4600 stars 了。



另外作者现在摄影技术也逆天。

看依赖需要 bs4
但代码中又没有出现?

这个应该是之前用了 bs4,后来又改用其他的,但是依赖里面没有去掉,因为昨天我看的时候代码才 200 行

像是拯救世界

文档好多错误,跑不起来

for the horde

顶 k 神下

研究中。文档确实错误挺多
Tutorial 第一行代码 from requests_html import HTMLSession 就报错,应该 import Session

明显是爬虫嘛……

感谢作者,正需求这样的库!




import HTMLSession 报错的原因是因为它会自动加载 fake_useragents.json,你的网络可能不能访问 cloudfront。
认真读一秒报错提示吧。

谢谢,我还在研究。不过报错提示我实在没看出啥…

版本更新太快,所以用的时候要注意安装的版本和 Github 上的代码 commit 时间。

我想问下这个库可以将<script>标签里面的 js 代码快速转换成 python 对象吗?有什么办法吗?正好遇到这个问题。
现在只能换成字符串强行切

目前已经 700 行代码,7700+ star,有没有人用过,感觉如何?

回到顶部