如何抓取Angular JS Web应用程序?

时间:2015-06-23 16:28:19

标签: python angularjs selenium web-crawler scrapy

我正在尝试抓取一个网络应用程序,该网站应用程序已登录为第一个障碍并且构建在角度js上。我正在使用scrapy和selenium来抓取网站,但是登录时出现问题。我有这篇帖子,我在那里寻求帮助https://stackoverflow.com/questions/30926880/what-is-the-best-way-for-crawling-with-scrapy-and-selenium-angularjs-website,但我没有得到任何帮助。问题是,当我使用selenium(如下所示)读取body元素的innerHTML时,它给了我空白的响应。为什么会这样?是因为HTTPS还是因为任何其他权限问题?

此外,如果有人可以帮助我如何使用scrapy和selenium以及登录和cookie来废弃网站。这将非常有用。

def crawl_url(url, run_headless=True):
    if run_headless:
        display = Display(visible=0, size=(1024, 768))
        display.start()

    url = correct_url(url)
    browser = webdriver.PhantomJS(service_args=['--load-images=no'])
    login_url = "https://domain.com/login"
    browser.get(login_url)
    time.sleep(15)
    element = browser.find_element_by_xpath('/html/body')
    print element.get_attribute('innerHTML')

1 个答案:

答案 0 :(得分:1)

众所周知,PhantomJS存在Angular问题,建议您改用Chrome。您可以从https://devblog.supportbee.com/2014/10/27/setting-up-cucumber-to-run-with-Chrome-on-Linux/安装chromedriver并替换

browser = webdriver.PhantomJS(service_args=['--load-images=no'])

browser = webdriver.Chrome()

然后这应该工作。您也可以使用一个名为Protractor的框架,它专门用于测试Angular页面,它知道如何运行和解析JavaScript以获取html。它有一个基于selenium构建的webdriverjs包装器。