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 support
和javascript:Yay! Supports javascript
没有JS支持的报废:
import requestsfrom 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 webdriverdriver = 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 dryscrapefrom 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