刮擦使用Python使用JavaScript创建的动态内容
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了刮擦使用Python使用JavaScript创建的动态内容,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2202字,纯文字阅读大概需要4分钟。
内容图文
![刮擦使用Python使用JavaScript创建的动态内容](/upload/InfoBanner/zyjiaocheng/695/94d1969648864b619bf0bf123379ff93.jpg)
我想使用python脚本抓取由javascript函数创建的DIV内容.我已经尝试使用BS4,并且这样做无法获得动态数据.相反,它仅显示源代码.
样例代码:
import requests
from bs4 import BeautifulSoup
URL = "https://rawgit.com/skysoft999/tableauJS/master/example.html"
r = requests.get(URL)
soup = BeautifulSoup(r.content, 'html5lib')
for row in soup.findAll('div', attrs = {'class':'quote'}):
print(row)
print(soup.prettify())
示例HTML源代码在Pastebin中
要提取的样本数据:
解决方法:
初始HTML不包含您要抓取的数据,这就是为什么仅使用BeautifulSoup不够的原因.您可以使用Selenium加载页面,然后抓取内容.
码:
import json
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
html = None
url = 'http://demo-tableau.bitballoon.com/'
selector = '#dataTarget > div'
delay = 10 # seconds
browser = webdriver.Chrome()
browser.get(url)
try:
# wait for button to be enabled
WebDriverWait(browser, delay).until(
EC.element_to_be_clickable((By.ID, 'getData'))
)
button = browser.find_element_by_id('getData')
button.click()
# wait for data to be loaded
WebDriverWait(browser, delay).until(
EC.presence_of_element_located((By.CSS_SELECTOR, selector))
)
except TimeoutException:
print('Loading took too much time!')
else:
html = browser.page_source
finally:
browser.quit()
if html:
soup = BeautifulSoup(html, 'lxml')
raw_data = soup.select_one(selector).text
data = json.loads(raw_data)
import pprint
pprint.pprint(data)
输出:
[[{'formattedValue': 'Atlantic', 'value': 'Atlantic'},
{'formattedValue': '6/26/2010 3:00:00 AM', 'value': '2010-06-26 03:00:00'},
{'formattedValue': 'ALEX', 'value': 'ALEX'},
{'formattedValue': '16.70000', 'value': '16.7'},
{'formattedValue': '-84.40000', 'value': '-84.4'},
{'formattedValue': '30', 'value': '30'}],
...
]
该代码假定该按钮最初处于禁用状态:< button id =“ getData” onclick =“ getUnderlyingData()” disable>获取数据< / button>并且不会自动加载数据,而是由于单击了按钮.因此,您需要删除以下行:setTimeout(function(){getUnderlyingData();},3000);.
您可以在以下位置找到示例的工作演示:http://demo-tableau.bitballoon.com/.
内容总结
以上是互联网集市为您收集整理的刮擦使用Python使用JavaScript创建的动态内容全部内容,希望文章能够帮你解决刮擦使用Python使用JavaScript创建的动态内容所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。