Python动态网页抓取JavaScript内容
我正在使用Python和Selenium来抓取一个网站的数据。我的操作是先访问主页,然后输入一个关键词,比如1300746-79-5。在结果页面上,我想抓取“定价”部分的数据。具体来说,我需要获取“SKU-包装大小”和“价格(美元)”的信息。但是这些信息是用JavaScript加密的,所以我在源代码中看不到它们。我想知道我该如何做到这一点。
我已经写了一些代码,能够让我到达感兴趣的页面,但我仍然看不到JavaScript的信息。以下是我目前的代码。
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pprint
# Create a new instance of the Firefox driver
driver = webdriver.Chrome('C:\Users\Rei\Desktop\chromedriver.exe')
driver.get("http://www.sigmaaldrich.com/united-states.html")
print driver.title
inputElement = driver.find_element_by_name("Query")
# type in the search
inputElement.send_keys("1300746-79-5")
inputElement.submit()
1 个回答
1
我觉得你做的所有事情都没问题。
“SKU-包装大小”和“价格(美元)”这些信息并不是“加密”的,而是在你点击某个按钮后通过JavaScript获取的。你只需要点击产品名称或价格链接就可以了。
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pprint
driver = webdriver.Chrome()
driver.get("http://www.sigmaaldrich.com/united-states.html")
print driver.title
inputElement = driver.find_element_by_name("Query")
# type in the search
inputElement.send_keys("1300746-79-5")
inputElement.submit()
pricing_link = driver.find_element_by_css_selector("li.priceValue a")
print pricing_link.text
pricing_link.click()
# then deal with the data you want
price_table = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".priceAvailContainer tbody"))
)
print 'price_table.text: ' + price_table.text
driver.quit()