如何抓取javascript动态网站

时间:2017-09-05 13:25:00

标签: python selenium request scrapy

我一直试图抓住下面的网站但遇到一些问题。我无法找到他们如何构建他们展示的empresas(英文:公司)列表。
当我选择一些类别并提交表单时,网址没有变化,我试图查看请求但没有成功。(这里不是网络开发者)。

    http://www.vitrinedoexportador.gov.br

我首先尝试浏览网页中的所有链接。我尝试的第一种方法是强制所有网址。他们有这种语法。 " http://www.vitrinedoexportador.gov.br/bens/ve/br/detalhes/index/cdEmpresa/" + 6位数代码+"#inicio"。

但我认为尝试999999种可能性是解决问题的错误方法。 我尝试的下一个方法是使用selenium webdriver浏览页面。 使用以下代码:

    from selenium import webdriver

    from selenium.webdriver.support.ui import Select
    from bs4 import BeautifulSoup
    import time

    browser = webdriver.Firefox()
    browser.get('http://www.vitrinedoexportador.gov.br/bens/ve/br#a')
    # navigate to the page
    select = Select(browser.find_element_by_id('cdSetor'))
    print (select.options)
    for opt in select.options:
        print (opt.text)
        opt.click()
        if(opt.text != 'Escolha'):
            opt.submit()
            time.sleep(5) # tem q colocar esse  para a página poder carregar.
            listaEmpresas = browser.find_elements_by_tag_name("h6")

            for link in listaEmpresas:
                print(link)
            print (listaEmpresas)

            listaEmpresas[0].click()

但是看起来非常缓慢,我只能找到一个公司,是否有更聪明的方法来做到这一点?

我尝试的其他方法是使用剪贴簿,我已经可以使用我想要的所有字段解析整个公司页面。所以,如果你们帮助我获得所有的IDS,我可以解析我已经内置的scrapy项目。

谢谢。

1 个答案:

答案 0 :(得分:0)

我已经完成了与此类似的事情,并没有超级简单的方法。通常没有所有公司的列表,因为它属于后端。您必须使用前端导航到一个页面,您可以在其中构建循环以废弃您想要的内容。

例如:我点击了主网址,然后我更改了过滤器'Valor da empresa',它只有五个选项。我选择了第一家,这给了我3436家公司。现在它依赖于您想要废弃公司的详细信息或仅废弃主要信息,例如此页面中已有的tel cep地址。如果您需要详细信息,您必须构建一个循环点击每个链接,从主页面废弃,返回搜索并单击下一个链接。如果您只需要主要信息,则可以通过抓取class=resultitem美丽汤,并循环浏览数据来获取第一页,从而在搜索页面上获取该信息。 在任何情况下,下一步(在第一页的所有链接都被删除之后)按第二页并再次执行。

在您废弃所有3436的第一个过滤器后,再次为其他4个过滤器执行此操作,您将获得所有公司

您可以使用其他过滤器,但它们有很多选项,并且要经过所有公司,您需要完成所有这些过程,这是更多的工作。

希望有所帮助!