CodeGym /课程 /Python SELF ZH /使用JavaScript内容

使用JavaScript内容

Python SELF ZH
第 33 级 , 课程 1
可用

1. 动态页面介绍

如果你曾经试图爬取那些通过JavaScript实时更新内容的网站, 那么你可能知道这真的是一件让人头疼的事。但别担心! 正如人们常说,任何复杂的代码都可以调整得像魔法一样。让我们来看看 requests_html是如何帮助我们处理这些内容的。

众所周知,并不是所有网页都一样有用。 有些页面会直接加载内容,而另一些页面可能会通过JavaScript动态生成或更新内容。 这给想要提取数据的人带来了一些麻烦,因为通过开发者工具看到的HTML可能和通过常规请求获取到的HTML不同。

爬取动态内容时遇到的问题

大多数处理网页的库,比如requests,只处理服务器端的响应,无法执行JavaScript。 这意味着,如果数据是通过JavaScript加载或修改的,你可能在常规请求中根本看不到这些数据。

2. 使用requests_html

在这里,requests_html登上了舞台——这是一个结合了requests的简洁和浏览器执行JavaScript的强大功能的库。 它提供了一个基础的渲染引擎,让你可以像使用真正的浏览器一样与动态网页互动。

安装和配置库

开始工作之前,让我们先安装requests_html。打开你喜欢的终端,然后执行以下命令:

Bash
pip install requests-html

很棒,库已经安装好了!现在我们可以开始使用它。

使用requests_html提取JavaScript内容的基础知识

requests_html让我们的生活更简单。让我们看看它在实践中的表现。假设我们有一个页面,它通过JavaScript生成一些数据。

Python

from requests_html import HTMLSession

# 创建HTML会话
session = HTMLSession()

# 向网页发送请求
response = session.get('https://example-dynamic-page.com')

# 渲染JavaScript
response.html.render()

# 提取数据
data = response.html.find('#dynamic-content', first=True)
print(data.text)

这就是魔法!与requests不同,requests_html提供了一个 .render()方法,允许“运行”页面并执行JavaScript。 页面“活了”之后,你就可以使用我们之前学过的选择器提取所有需要的数据。

3. 数据提取示例

现在让我们深入一点,看看几个示例,这样你就可以了解 requests_html是如何在不同场景中帮助我们的。

动态页面数据提取实战

想象一下一个页面,它只有在滚动后才加载最新动态。 使用requests_html,我们可以模拟用户的行为。

Python

url = 'https://example-news-site.com'

# 加载页面
response = session.get(url)

# 如果需要,增加渲染的超时时间
response.html.render(timeout=20)

# 查找包含新闻的元素
news_items = response.html.find('.news-item')

for item in news_items:
print(item.text)

你看,就这么轻松自如地,我们访问了以前看来难以捉摸的内容!

使用requests_html处理加载的JavaScript内容

使用requests_html和我们在之前课程中学过的CSS选择器, 你可以像一个资深爬虫工程师一样处理网页内容!

Python

# 选择第一个新闻标题元素
headline = response.html.find('.news-headline', first=True)
print(headline.text)

# 从元素中提取链接
link = headline.find('a', first=True).attrs['href']
print(link)

4. 实用建议和技巧

虽然requests_html是一个强大的工具,但在使用它时需要记住几点:

  • 超时和延迟:别忘了为更复杂的页面设置渲染超时。 这样可以避免因加载缓慢导致的错误。
  • 渲染能力: requests_html可能会消耗大量资源,因为它需要渲染JavaScript。 对于大量数据或复杂页面,这可能会使过程变慢。
  • CAPTCHA和反爬保护: requests_html无法绕过反爬虫保护和CAPTCHA, 所以对于更复杂的情况,最好使用Selenium。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION