我正在尝试开发一个简单的网络爬虫。我想提取没有 HTML 代码的文本。它适用于纯 HTML,但不适用于 JavaScript 代码添加文本的某些页面。
例如,如果一些 JavaScript 代码添加了一些文本,我看不到它,因为当我调用时:
response = urllib2.urlopen(request)
我得到了没有添加的原始文本(因为 JavaScript 是在客户端执行的)。
所以,我正在寻找一些想法来解决这个问题。
最佳答案
2021 年 9 月编辑:phantomjs
也不再维护
编辑 2017 年 12 月 30 日:此答案出现在 Google 搜索的热门结果中,因此我决定对其进行更新。旧答案仍在最后。
dryscape 不再维护,dryscape 开发人员推荐的库仅是 Python 2。我发现使用 Selenium 的 python 库和 Phantom JS 作为 Web 驱动程序足够快并且很容易完成工作。
安装后Phantom JS ,请确保 phantomjs
二进制文件在当前路径中可用:
phantomjs --version
# result:
2.1.1
#示例 举个例子,我用下面的 HTML 代码创建了一个示例页面。 (link):
<!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 它说:不支持 javascript
和 javascript:耶!支持javascript
#Scraping 不支持 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>
#Scraping 与 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 驱动的网站。
#Scraping 与 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>
关于javascript - 使用 Python 抓取网页的 JavaScript 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8049520/