【问题标题】:How to scrape some contents on a website which was hidden using JS in Python? [closed]如何在 Python 中使用 JS 隐藏的网站上抓取一些内容? [关闭]
【发布时间】:2014-08-05 15:03:01
【问题描述】:

我最近正在学习关于使用 Python 抓取网站的课程。网站 URL 为“http://www.kiva.org/lend/742129”。这是一个慈善网站。我想抓取的内容是关于这个项目的贡献者。而且我确信它使用了一些我不知道它是如何工作的 JS 技术。

我试图分析 html 源页面,但我只发现当我单击更多按钮时,整个页面源都发生了变化。所以我可以抓取内容,除非我点击 JS 链接。但我就是不知道如何在 python 中模拟网络浏览器。

通过询问班上的导师,我被告知是使用一个名为 request 的模块还是另一个名为 mechanize 的模块,但这些对我来说都不起作用。我厌倦了使用名为 selenium 的模块,但它太复杂了,我迷路了..

有没有人可以给我一些关于如何使它工作的建议。我真的是网站和网络抓取的初学者。而且我完全不知道如何分析 html 并列出贡献者名单。

【问题讨论】:

    标签: javascript python html selenium web-scraping


    【解决方案1】:

    这个特殊的网站有很多动态的事情正在发生。例如,为了查看More 链接 - 您需要将页面向下滚动到底部几次。然后,点击More 后,您需要等待它处理。这是您可以开始的地方(实际上它是一个工作代码):

    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    import time
    
    
    driver = webdriver.Firefox()
    driver.get('http://www.kiva.org/lend/742129')
    
    for _ in xrange(5):
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(1)
    
    more = WebDriverWait(driver, 10).until(lambda driver : driver.find_element_by_id('showMoreLenders'))
    more.click()
    
    time.sleep(2)
    
    # get the lenders
    for lender in driver.find_elements_by_xpath('//section[@id="theLenders"]//li//div[@class="name"]/a'):
        print lender.text
    
    driver.close()
    

    它会在页面上打印所有 72 个贷方(我不会在此处发布它们,因为这些是名称)。

    我不认为那些 time.sleep() 调用可靠,但作为一个例子,这没问题 - 您可能需要切换到使用 WebDriverWaits 而不是显式延迟。

    【讨论】:

    • 我明白了,谢谢。所以它更像是模拟我们人类浏览网页的整个过程。与我从课程中学到的完全不同。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    相关资源
    最近更新 更多