2017-09-05 144 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