我一直试图抓住下面的网站但遇到一些问题。我无法找到他们如何构建他们展示的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项目。
谢谢。
答案 0 :(得分:0)
我已经完成了与此类似的事情,并没有超级简单的方法。通常没有所有公司的列表,因为它属于后端。您必须使用前端导航到一个页面,您可以在其中构建循环以废弃您想要的内容。
例如:我点击了主网址,然后我更改了过滤器'Valor da empresa',它只有五个选项。我选择了第一家,这给了我3436家公司。现在它依赖于您想要废弃公司的详细信息或仅废弃主要信息,例如此页面中已有的tel cep地址。如果您需要详细信息,您必须构建一个循环点击每个链接,从主页面废弃,返回搜索并单击下一个链接。如果您只需要主要信息,则可以通过抓取class=resultitem
美丽汤,并循环浏览数据来获取第一页,从而在搜索页面上获取该信息。
在任何情况下,下一步(在第一页的所有链接都被删除之后)按第二页并再次执行。
在您废弃所有3436的第一个过滤器后,再次为其他4个过滤器执行此操作,您将获得所有公司
您可以使用其他过滤器,但它们有很多选项,并且要经过所有公司,您需要完成所有这些过程,这是更多的工作。
希望有所帮助!