2017-09-05 72 views
-1

我一直在试图抓取下面的网站,但有一些问题。我找不到他们如何建立他们展示的empresas(英语:公司)列表。
当我选择一些类别并提交表单时,url并没有改变,我试着去查看请求但没有成功。(不是webdeveloper在这里)。如何刮动JavaScript动态网站

http://www.vitrinedoexportador.gov.br 

我第一次尝试去浏览网页中的所有链接。我试过的第一种方法是强制所有的URL。他们有这个语法。 “http://www.vitrinedoexportador.gov.br/bens/ve/br/detalhes/index/cdEmpresa/”+6位数字+“#inicio”。

但我认为尝试999999的可能性将是错误的方法来解决问题。 我尝试的下一个方法是使用硒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() 

但作用似乎慢得令人难以置信,我只能得到一个仍然companie,有没有更聪明的方式做到这一点?

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

谢谢。

回答

0

我已经做了一些非常相似的事情,并没有超级简单的方法。通常没有所有公司的名单,因为它属于后端。你必须使用前端导航到一个页面,你可以建立一个循环来取消你想要的。

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

后您取消第一过滤器的所有3436,其他4个过滤器做一遍,你会得到所有公司

您可以使用其它的过滤器,但它们有许多选项,并通过所有的公司,你会必须经历所有这些,这是更多的工作。

希望有帮助!

+0

我正在做你说过的这种方式。有没有建议让硒快速运行? – WagnerAlbJr

+0

不...好运 – Tico