Python-使用Python网页抓取JavaScript页面

我正在尝试开发一个简单的网页抓取工具。我想提取没有HTML代码的文本。我实现了这个目标,但是我发现在某些加载了JavaScript的页面中,我没有获得良好的结果。

例如,如果一些JavaScript代码添加了一些文本,则看不到它,因为当我调用

response = urllib2.urlopen(request)

我得到的原始文本没有添加文本(因为在客户端执行了JavaScript)。

因此,我正在寻找一些解决此问题的想法。

回答:

一旦安装了Phantom JS,请确保phantomjs二进制文件在当前路径中可用:

phantomjs --version

# result:

2.1.1

举个例子,我用以下HTML代码创建了一个示例页面。

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>Javascript scraping test</title>

</head>

<body>

<p id='intro-text'>No javascript support</p>

<script>

document.getElementById('intro-text').innerHTML = 'Yay! Supports javascript';

</script>

</body>

</html>

如果没有javascript,它会说:No javascript supportjavascript:Yay! Supports javascript

没有JS支持的报废:

import requests

from bs4 import BeautifulSoup

response = requests.get(my_url)

soup = BeautifulSoup(response.text)

soup.find(id="intro-text")

# Result:

<p id="intro-text">No javascript support</p>

借助JS支持进行报废:

from selenium import webdriver

driver = webdriver.PhantomJS()

driver.get(my_url)

p_element = driver.find_element_by_id(id_='intro-text')

print(p_element.text)

# result:

'Yay! Supports javascript'

你还可以使用Python库dryscrape抓取javascript驱动的网站。

借助JS支持进行报废:

import dryscrape

from bs4 import BeautifulSoup

session = dryscrape.Session()

session.visit(my_url)

response = session.body()

soup = BeautifulSoup(response)

soup.find(id="intro-text")

# Result:

<p id="intro-text">Yay! Supports javascript</p>

以上是 Python-使用Python网页抓取JavaScript页面 的全部内容, 来源链接: utcz.com/qa/432451.html

回到顶部