【问题标题】:python dynamic webscraping javascript contentpython动态网页抓取javascript内容
【发布时间】:2014-06-30 00:47:21
【问题描述】:

我正在使用 Python 和 Selenium 来抓取网站。我要做的是转到homepage,输入关键字,例如1300746-79-5。在resulting page 上,我试图在“定价”部分中抓取数据。具体来说,我需要获取“SKU-Pack Size”和“Price(USD)”信息。但是这些信息是 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()

【问题讨论】:

    标签: python selenium web-scraping


    【解决方案1】:

    你所做的一切在我看来都是正确的。

    “SKU-Pack Size”和“Price(USD)”信息未“加密”,而是在 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()
    

    【讨论】:

    • 您能解释一下在执行 javascript 点击操作后我应该做什么吗?还是没看到源代码里的SKU和定价信息……我在想用beautifulsoup来提取具体的元素。但是我的代码没有返回产品网址,所以我一无所知。
    • @user3788728:嗯。听起来好像有什么不对劲。你能在 UI 中看到它(用你的眼睛)吗?您的 Selenium、Chrome、ChromeDriver 版本是什么?
    • 我的 chrome 版本是 35.0.1916.153 ,ChromeDriver 是 2.9。我今天早上下载了 selenium,所以应该是最新版本。
    • 如果我突出显示该部分并选择视图元素,我可以看到它。但是如果我只是进入页面源代码,它们不会显示
    • @user3788728:这里一切正常。我将在上面发布完整的代码。我在获取数据时没有遇到任何问题。页面源可能对 AJAX 调用有一些限制。您首先关心页面源的任何特殊原因?
    猜你喜欢
    • 1970-01-01
    • 2020-05-24
    • 2021-10-04
    • 2013-07-10
    • 2023-01-29
    • 2019-01-13
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多