在Python 3中,我需要提取站点中表格中的链接。我这样做了
from bs4 import BeautifulSoup
from urllib.request import urlopen
import urllib.request, urllib.parse, urllib.error
geral = urlopen("http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/dados-abertos-do-cnpj")
bsObje = BeautifulSoup(geral, "lxml")
estados = bsObje.findAll("table", {"class":"plain"})
print(estados)
输出:
[<table class="plain"><tbody><tr><th><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214AC" target="_self" title="Acre">Acre</a></th><th><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214ES" target="_self" title="">Espírito Santo</a></th><th><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214PB" target="_self" title="Paraíba">Paraíba</a></th><th><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214RO" target="_self" title="Rondônia">Rondônia</a></th></tr><tr><td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214AL" target="_self" title="Alagos">Alagoas</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214GO" target="_self" title="Goiás">Goiás</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214PR" target="_self" title="Paraná">Paraná</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214RR" target="_self" title="Roraima">Roraima</a></strong></td>
</tr><tr><td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214AP" target="_self" title="Amapá">Amapá</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214MA" target="_self" title="Maranhão">Maranhão</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214PE" target="_self" title="Pernambuco">Pernambuco</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214SC" target="_self" title="Santa Catarina">Santa Catarina</a></strong></td>
</tr><tr><td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214AM" target="_self" title="Amazonas">Amazonas</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214MT" target="_self" title="Mato Grosso">Mato Grosso</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214PI" target="_self" title="Piauí">Piauí</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214SP" target="_self" title="São Paulo">São Paulo</a></strong></td>
</tr><tr><td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214BA" target="_self" title="Bahia">Bahia</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214MS" target="_self" title="Mato Grosso do Sul">Mato Grosso do Sul</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214RJ" target="_self" title="Rio de Janeiro">Rio de Janeiro</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214SE" target="_self" title="Sergipe">Sergipe</a></strong></td>
</tr><tr><td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214CE" target="_self" title="Ceará">Ceará</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214MG" target="_self" title="Minas Gerais">Minas Gerais</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214RN" target="_self" title="Rio Grande do Norte">Rio Grande do Norte</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214TO" target="_self" title="Tocantins">Tocantins</a></strong></td>
</tr><tr><td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214DF" target="_self" title="Distrito Federal">Distrito Federal</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214PA" target="_self" title="Pará">Pará</a></strong></td>
<td><strong><a class="external-link" href="http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214RS" target="_self" title="Rio Grande do Sul">Rio Grande do Sul</a></strong></td>
<td></td>
</tr></tbody></table>]
我想提取“href”和“title”来创建列表或字典。
我尝试在estados
中进行迭代,但它生成了一个空值:
for name in estados:
url = name.get('href')
local = name.get('title')
print(local)
print(url)
输出:
None
None
在这种情况下,请问如何从每个表项中提取'href'及其各自的标题?
答案 0 :(得分:3)
您正在使用单个元素迭代列表。试试这个:
for name in estados[0].findAll("a"):
url = name.get('href')
local = name.get('title')
print(local)
print(url)
答案 1 :(得分:2)
根据BeautifulSoup documentation,您似乎应该将for name in estados
更改为:
for name in estados.find_all('a'):
答案 2 :(得分:1)
也许在表格中使用类<a>
获取所有external-link
个标签会有所帮助。
from bs4 import BeautifulSoup
from urllib.request import urlopen
import urllib.request, urllib.parse, urllib.error
geral = urlopen("http://idg.receita.fazenda.gov.br/orientacao/tributaria /cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/dados-abertos-do-cnpj")
bsObje = BeautifulSoup(geral, "lxml")
estados = bsObje.findAll("table", {"class":"plain"})[0].findAll('a', {"class":"external-link"})
estados = {a.get('title'): a.get('href') for a in estados}
print(estados)
如果您只使用find
代替findAll
对第一个(可能是唯一的)表感兴趣,您也可以删除该索引:
estados = bsObje.find("table", {"class":"plain"}).findAll('a', {"class":"external-link"})
答案 3 :(得分:1)
如果我能正确理解你,那么下面的代码就会让你:
from bs4 import BeautifulSoup
import requests
dict_val={}
res = requests.get("http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/dados-abertos-do-cnpj")
soup = BeautifulSoup(res.text, "lxml")
table = soup.select("table.plain")[0]
for items in table.select("tr"):
data = [[item.text,item['href']] for item in items.select(".external-link")]
for data_dict in data:
dict_val[data_dict[0]] = data_dict[1]
print(dict_val)
部分输出:
{'Alagoas': 'http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214AL', 'Pará': 'http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214PA',