Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,如何使用多个<;td>;?_Python_Html_Web Scraping_Beautifulsoup - Fatal编程技术网

在Python中,如何使用多个<;td>;?

在Python中,如何使用多个<;td>;?,python,html,web-scraping,beautifulsoup,Python,Html,Web Scraping,Beautifulsoup,在Python3中,我需要收集表中站点的大量信息(第一个站点是:) 所示内容: http://www.portaltransparencia.gov.br/ceis?pagina=1 [<tr class="nome-divergente"> <td> <a href="/ceis/empresa/08307727000128"> 08.307.727/0001-28

在Python3中,我需要收集表中站点的大量信息(第一个站点是:)

所示内容:

http://www.portaltransparencia.gov.br/ceis?pagina=1
[<tr class="nome-divergente">
<td>
<a href="/ceis/empresa/08307727000128">
                                08.307.727/0001-28
                            </a>
</td>
<td> TECK SHOCK COMERCIO E SERVICO EIRELI  - ME   ** </td>
<td>Suspensão - Lei de Licitações</td>
<td>16/05/2018</td>
<td>Governo do Estado do Espírito Santo (ES)</td>
<td>ES</td>
</tr>, <tr class="nome-divergente">
<td>
<a href="/ceis/empresa/05236586000101">
                                05.236.586/0001-01
                            </a>
</td>
<td> META TERCEIRIZACOES E SERVICOS LTDA   ** </td>
<td>Suspensão - Legislação Estadual</td>
<td>26/12/2018</td>
<td>Governo do Estado da Bahia</td>
<td>BA</td>
</tr>, <tr class="nome-divergente">
<td>
<a href="/ceis/empresa/05236586000101">
                                05.236.586/0001-01
                            </a>
</td>
<td> META TERCEIRIZACOES E SERVICOS LTDA   ** </td>
<td>Suspensão - Legislação Estadual</td>
<td>22/08/2018</td>
<td>Governo do Estado da Bahia (BA)</td>
<td>BA</td>
</tr>, <tr class="nome-divergente">
<td>
<a href="/ceis/empresa/05236586000101">
                                05.236.586/0001-01
                            </a>
</td>
<td> META TERCEIRIZACOES E SERVICOS LTDA   ** </td>
<td>Inidoneidade - Legislação Estadual</td>
<td></td>
<td>Governo do Estado da Bahia (BA)</td>
<td>BA</td>
</tr>, <tr class="nome-divergente">
<td>
<a href="/ceis/empresa/04125082000151">
                                04.125.082/0001-51
                            </a>
</td>
<td> PRIMEIRA OPCAO LOCACAO TRANSPORTE E TURISMO LTDA - ME   ** </td>
<td>Inidoneidade - Lei da ANTT e ANTAQ </td>
<td>16/01/2021</td>
<td>AGÊNCIA NACIONAL DE TRANSPORTES TERRESTRES</td>
<td>DF</td>
</tr>]
# This is the content of blocos

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-63-dae9be7999b3> in <module>()
     12             cnpj = linha.find("a").text.strip()
     13             link = linha.find("href")
---> 14             nome = linha.find("td")[1].text.strip()
     15             tipo = linha.find("td")[2].text.strip()
     16             data = linha.find("td")[3].text.strip()

~/Documentos/Code/knight/lib/python3.6/site-packages/bs4/element.py in __getitem__(self, key)
   1009         """tag[key] returns the value of the 'key' attribute for the tag,
   1010         and throws an exception if it's not there."""
-> 1011         return self.attrs[key]
   1012 
   1013     def __iter__(self):

KeyError: 1
http://www.portaltransparencia.gov.br/ceis?pagina=1
[
TECK SHOCK COMERCIO E SERVICO EIRELI-ME**
利西塔悬念
16/05/2018
埃斯皮里托省政府(ES)
锿
, 
META TERCEIRIZACOES E SERVICOS LTDA**
悬念——立法机关
26/12/2018
巴伊亚州政府
文学士
, 
META TERCEIRIZACOES E SERVICOS LTDA**
悬念——立法机关
22/08/2018
巴伊亚州政府(文学士)
文学士
, 
META TERCEIRIZACOES E SERVICOS LTDA**
伊尼多尼亚德-立法机构
巴伊亚州政府(文学士)
文学士
, 
PRIMEIRA OPCAO本地运输和旅游有限公司-ME**
Inidoneidade-Lei da ANTT e ANTAQ
16/01/2021
阿根廷国家运输局(AGÊNCIA National DE TRANSPORTES TERRESTRES)
DF
]
#这是blocos的内容
---------------------------------------------------------------------------
KeyError回溯(最近一次呼叫最后一次)
在()
12 cnpj=linha.find(“a”).text.strip()
13 link=linha.find(“href”)
--->14 nome=linha.find(“td”)[1].text.strip()
15 tipo=linha.find(“td”)[2].text.strip()
16 data=linha.find(“td”)[3].text.strip()
~/Documentos/Code/knight/lib/python3.6/site-packages/bs4/element.py in\uuuuu getitem\uuuuuu(self,key)
1009“”标记[key]返回标记的“key”属性的值,
1010并在不存在时抛出异常。”“”
->1011返回self.attrs[键]
1012
1013定义iter(自身):
关键错误:1
所以,对于表中的每一行,“blocos”都有一系列的 我想我应该在“blocos”中写一篇文章来读这篇文章 我尝试访问该号码,例如
linha.find(“td”)[1].text.strip()
但是出现了一条错误消息
请问,有人知道我如何访问使用的表行吗?

您需要首先循环通过tr的,然后在该循环内部,循环通过td的。下面是一个简单的例子。我还建议动态获取总页数(819),不要使用硬编码的数字(就像在for循环中那样)


您需要首先循环通过tr的,然后在该循环内部,循环通过td的。下面是一个简单的例子。我还建议动态获取总页数(819),不要使用硬编码的数字(就像在for循环中那样)


非常感谢你。但是在这种方法中,您是否也可以隔离变量中的列?例如,cnpj='08.307.727/0001-28',link=''…更新了我的答案。这将为您指明正确的方向。非常感谢。但是在这种方法中,您是否也可以隔离变量中的列?例如,cnpj='08.307.727/0001-28',link=''…更新了我的答案。这会让你找到正确的方向。
http://www.portaltransparencia.gov.br/ceis?pagina=1
[<tr class="nome-divergente">
<td>
<a href="/ceis/empresa/08307727000128">
                                08.307.727/0001-28
                            </a>
</td>
<td> TECK SHOCK COMERCIO E SERVICO EIRELI  - ME   ** </td>
<td>Suspensão - Lei de Licitações</td>
<td>16/05/2018</td>
<td>Governo do Estado do Espírito Santo (ES)</td>
<td>ES</td>
</tr>, <tr class="nome-divergente">
<td>
<a href="/ceis/empresa/05236586000101">
                                05.236.586/0001-01
                            </a>
</td>
<td> META TERCEIRIZACOES E SERVICOS LTDA   ** </td>
<td>Suspensão - Legislação Estadual</td>
<td>26/12/2018</td>
<td>Governo do Estado da Bahia</td>
<td>BA</td>
</tr>, <tr class="nome-divergente">
<td>
<a href="/ceis/empresa/05236586000101">
                                05.236.586/0001-01
                            </a>
</td>
<td> META TERCEIRIZACOES E SERVICOS LTDA   ** </td>
<td>Suspensão - Legislação Estadual</td>
<td>22/08/2018</td>
<td>Governo do Estado da Bahia (BA)</td>
<td>BA</td>
</tr>, <tr class="nome-divergente">
<td>
<a href="/ceis/empresa/05236586000101">
                                05.236.586/0001-01
                            </a>
</td>
<td> META TERCEIRIZACOES E SERVICOS LTDA   ** </td>
<td>Inidoneidade - Legislação Estadual</td>
<td></td>
<td>Governo do Estado da Bahia (BA)</td>
<td>BA</td>
</tr>, <tr class="nome-divergente">
<td>
<a href="/ceis/empresa/04125082000151">
                                04.125.082/0001-51
                            </a>
</td>
<td> PRIMEIRA OPCAO LOCACAO TRANSPORTE E TURISMO LTDA - ME   ** </td>
<td>Inidoneidade - Lei da ANTT e ANTAQ </td>
<td>16/01/2021</td>
<td>AGÊNCIA NACIONAL DE TRANSPORTES TERRESTRES</td>
<td>DF</td>
</tr>]
# This is the content of blocos

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-63-dae9be7999b3> in <module>()
     12             cnpj = linha.find("a").text.strip()
     13             link = linha.find("href")
---> 14             nome = linha.find("td")[1].text.strip()
     15             tipo = linha.find("td")[2].text.strip()
     16             data = linha.find("td")[3].text.strip()

~/Documentos/Code/knight/lib/python3.6/site-packages/bs4/element.py in __getitem__(self, key)
   1009         """tag[key] returns the value of the 'key' attribute for the tag,
   1010         and throws an exception if it's not there."""
-> 1011         return self.attrs[key]
   1012 
   1013     def __iter__(self):

KeyError: 1
import requests
from bs4 import BeautifulSoup

if __name__ == '__main__':
    requestUrl = "http://www.portaltransparencia.gov.br/ceis?pagina=2"
    response = requests.get(requestUrl)
    soup = BeautifulSoup(response.content, "html.parser")

    data = []
    for tr in soup.find_all('tr'):
        col = 0
        for td in tr.find_all('td'):
            td_text = td.get_text().strip()
            if col == 0:
                cnpj_cpf = td_text
                cnpj_cpf_link = 'http://www.portaltransparencia.gov.br{}'
                cnpj_cpf_link = cnpj_cpf_link.format(td.find('a').get('href'))
            if col == 1:
                nome = td_text
            if col == 2:
                tipo = td_text
            if col == 3:
                data_final = td_text
            if col == 4:
                nome_do_orago = td_text
            if col == 5:
                uf = td_text
                data.append({
                    'cnpj_cpf' : cnpj_cpf,
                    'cnpj_cpf_link' : cnpj_cpf_link,
                    'nome' : nome, 
                    'tipo' : tipo,
                    'data_final' : data_final,
                    'nome_do_orago' : nome_do_orago,
                    'uf' : uf
                })
            col += 1
    print (data)