“AttributeError:‘str’对象没有属性‘descendants’错误,使用 bs4 和 selenium 进行自动抓取

Posted

技术标签:

【中文标题】“AttributeError:‘str’对象没有属性‘descendants’错误,使用 bs4 和 selenium 进行自动抓取【英文标题】:"AttributeError: 'str' object has no attribute 'descendants' error with automation scraping with bs4 and selenium 【发布时间】:2022-01-22 20:17:43 【问题描述】:

我使用此代码的目的是取消巴西资金的分配。

PATH = (r"C:\Users\gustavo.vieira\Desktop\python\drivers\msedgedriver.exe")
funds_list = ['VINLAND MACRO MASTER FUNDO DE INVESTIMENTO MULTIMERCADO']
url = 'https://cvmweb.cvm.gov.br/SWB/Sistemas/SCW/CPublica/CConsolFdo/FormBuscaParticFdo.aspx'


for i in funds_lista:
    driver = webdriver.Edge(PATH)
    driver.get(url)
    search = driver.find_element_by_name("txtCNPJNome")
    search.send_keys(i)
    search.send_keys(Keys.RETURN)
    driver.find_element_by_link_text(i).click()
    font = driver.find_element_by_link_text('Composição da Carteira').click()
    soup = BeautifulSoup(font)
    rows = soup.find_all("tr")
    print(rows)

我的问题从 bs4 开始,我已经尝试使用 soup.find_all('table', id ='dlAplics') 或使用 (class_) 来报废表,它们都返回错误。我已经看过很多视频,但我觉得无法解决这个问题现在是我自己。

【问题讨论】:

全部返回错误:你看到了什么? 我收到了很多不同的错误试图解决它,但主要是“AttributeError:'str' object has no attribute 'descendants'” 你想刮什么? 该页面的第二张表,其中出现“Ativo”“Classificação”直到第一张表的最后,有上个月巴西投资基金分配的所有信息。 【参考方案1】:

要从Consulta a Carteiras de Fundos 页面上的第一个表中抓取所有文本,您需要为visibility_of_element_located() 诱导WebDriverWait,您可以使用以下任一Locator Strategies:

代码块:

driver.get("https://cvmweb.cvm.gov.br/SWB/Sistemas/SCW/CPublica/CConsolFdo/FormBuscaParticFdo.aspx")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#txtCNPJNome"))).send_keys("VINLAND MACRO MASTER FUNDO DE INVESTIMENTO MULTIMERCADO" + Keys.RETURN)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a#ddlFundos__ctl0_lnkbtn1"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Composição da Carteira"))).click()
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//table[@id='tabAtivos']//table[@id='dlAplics']"))).text)

控制台输出:

Lista de Aplicações
Clique sobre o ativo para mais informações.
Ativo Classificação Empresa Ligada Negócios Realizados no Mês Posição Final
Vendas Aquisições Quant. Valores % Patr. Líq.
Quant. Valor
Quant. Valor
Custo
Mercado
Ações
Cod. Ativo: RDOR3
Dt. Ini. Vigen.: 10/12/2020
Para
negociação Não 38.219 2.139.131,81 37.866 2.239.218,96 1.502 75.355,34 0,005
Ações
Cod. Ativo: RDOR3
Dt. Ini. Vigen.: 25/06/2021
Para
negociação Não 38.219 2.139.131,81 37.866 2.239.218,96 1.502 75.355,34 0,005
Certificado ou recibo de depósito de valores mobiliários
Descrição: TAEE11 - TRANS. ALIANCA DE ENERGIA ELETRICA S/A - TAEE11
CNPJ do emissor: 07.859.971/0001-30
Denominação Social do emissor: TRANS. ALIANCA DE ENERGIA ELETRICA S/A
Para
negociação Não 0 0,00 0 0,00 979 35.273,37 0,002
Cotas de Fundos
HASHDEX NASDAQ ETHEREUM REFERENCE PRICE FUNDO DE ÍNDICE
Não 23.967 1.667.612,78 209.290 15.823.222,00 142.956 11.436.480,00 0,787
Cotas de Fundos
HASHDEX NASDAQ CRYPTO INDEX FUNDO DE INDICE
Não 628.668 38.177.765,73 634.819 39.878.659,26 87.530 5.487.255,70 0,378
Cotas de Fundos
ISHARES S&P 500 FUNDO DE INVESTIMENTO EM COTAS DE FUNDO DE ÍNDICE - INVESTIMENTO NO EXTERIOR
Não 26.057 7.285.144,24 31.466 8.871.406,46 5.983 1.678.530,65 0,116
Investimento no Exterior
Nome do emissor: CITCO - 376420,897566
Venc.: 31/12/2050
Para
negociação Não 0 0,00 0 0,00 376.421 257.652.646,82 17,731
Valores a pagar
Descrição: AURA33
CNPJ do emissor: 07.857.093/0001-14
Denominação Social do emissor: AURA MINERALS INC.
Para
negociação 458.916,75 -0,032

【讨论】:

哦,我明白了。谢谢【参考方案2】:

会发生什么?

您将.click() 分配给变量font 并尝试使用BeautifulSoup 处理它,但这是行不通的。

如何解决?

改为提供driver.page_sourceBeautifulSouphtml进行操作。

变化:

font = driver.find_element_by_link_text('Composição da Carteira').click()
soup = BeautifulSoup(font)

到:

driver.find_element_by_link_text('Composição da Carteira').click()
soup = BeautifulSoup(driver.page_source)

注意 * Id 通常是唯一的,因此您可以使用soup.find('table', id ='dlAplics') 而不是find_all() 直接对这张表进行操作。*


输出

<table border="1" cellpadding="4" cellspacing="0" class="BodyPP" id="dlAplics" rules="all" style="border-width:1px;border-style:solid;width:100%;border-collapse:collapse;">
<tbody><tr style="background-color:#ACC2D8;">
<td align="center" colspan="11"><b>Lista de Aplicações<br/>Clique sobre o ativo para mais informações.</b></td>
</tr><tr style="background-color:#ACC2D8;">
<td align="center" rowspan="3" style="width:30%;"><b>Ativo</b></td><td align="center" rowspan="3"><b>Classificação</b></td><td align="center" rowspan="3"><b>Empresa Ligada</b></td><td align="center" colspan="4"><b>Negócios Realizados no Mês</b></td><td align="center" colspan="4"><b>Posição Final</b></td>
</tr><tr style="background-color:#ACC2D8;">
<td align="center" colspan="2"><b>Vendas</b></td><td align="center" colspan="2"><b>Aquisições</b></td><td align="center" rowspan="2" style="width:7%;"><b>Quant.</b></td><td align="center" colspan="2"><b>Valores</b></td><td align="center" rowspan="2" style="width:7%;"><b>% Patr. Líq.</b></td>
</tr><tr style="background-color:#ACC2D8;">
<td align="center" style="width:7%;"><b>Quant.</b></td><td align="center" style="width:7%;"><b>Valor<br/></b></td><td align="center" style="width:7%;"><b>Quant.</b></td><td align="center" style="width:7%;"><b>Valor<br/></b></td><td align="center" style="width:7%;"><b>Custo<br/></b></td><td align="center" style="width:7%;"><b>Mercado<br/></b></td>
</tr><tr style="background-color:Cornsilk;">
<td align="left"><span onclick="AbrirDet('CDADetAplic.aspx?PkCDAAplic=72375627')" style="cursor: hand; COLOR: olivedrab"><b></b> Ações<br/><b>Cod. Ativo:</b> RDOR3<br/><b>Dt. Ini. Vigen.:</b> 10/12/2020<br/></span></td><td align="center"><span id="dlAplics__ctl1_lbNConfTpNegoc">Para<br/>negociação</span></td><td align="center"><span id="dlAplics__ctl1_lbNConfEmpLigada">Não</span></td><td align="center">38.219</td><td align="center"><span id="dlAplics__ctl1_lbNConfVlVendasNegoc">2.139.131,81</span></td><td align="center">37.866</td><td align="center"><span id="dlAplics__ctl1_lbNConfVlAquisNegoc">2.239.218,96</span></td><td align="center">1.502</td><td align="center"><span id="dlAplics__ctl1_lbNConfVlCustoCorrecPosFim"></span></td><td align="center"><span id="dlAplics__ctl1_lbNConfVlPosFim">75.355,34</span></td><td align="center">0,005</td>
</tr><tr style="background-color:#FAEFCA;">
<td align="left"><span onclick="AbrirDet('CDADetAplic.aspx?PkCDAAplic=72375615')" style="cursor: hand; COLOR: olivedrab"><b></b> Ações<br/><b>Cod. Ativo:</b> RDOR3<br/><b>Dt. Ini. Vigen.:</b> 25/06/2021<br/></span></td><td align="center"><span id="dlAplics__ctl2_lbNConfAltTpNegoc">Para<br/>negociação</span></td><td align="center"><span id="dlAplics__ctl2_lbNConfAltEmpLigada">Não</span></td><td align="center">38.219</td><td align="center"><span id="dlAplics__ctl2_lbNConfAltVlVendasNegoc">2.139.131,81</span></td><td align="center">37.866</td><td align="center"><span id="dlAplics__ctl2_lbNConfAltVlAquisNegoc">2.239.218,96</span></td><td align="center">1.502</td><td align="center"><span id="dlAplics__ctl2_lbNConfAltVlCustoCorrecPosFim"></span></td><td align="center"><span id="dlAplics__ctl2_lbNConfAltVlPosFim">75.355,34</span></td><td align="center">0,005</td>
</tr><tr style="background-color:Cornsilk;">
<td align="left"><span onclick="AbrirDet('CDADetAplic.aspx?PkCDAAplic=72375728')" style="cursor: hand; COLOR: olivedrab"><b></b> Certificado ou recibo de depósito de valores mobiliários<br/><b>Descrição:</b> TAEE11 - TRANS. ALIANCA DE ENERGIA ELETRICA S/A - TAEE11<br/><b>CNPJ do emissor:</b> 07.859.971/0001-30<br/><b>Denominação Social do emissor: </b> TRANS. ALIANCA DE ENERGIA ELETRICA S/A<br/></span></td><td align="center"><span id="dlAplics__ctl3_lbNConfTpNegoc">Para<br/>negociação</span></td><td align="center"><span id="dlAplics__ctl3_lbNConfEmpLigada">Não</span></td><td align="center">0</td><td align="center"><span id="dlAplics__ctl3_lbNConfVlVendasNegoc">0,00</span></td><td align="center">0</td><td align="center"><span id="dlAplics__ctl3_lbNConfVlAquisNegoc">0,00</span></td><td align="center">979</td><td align="center"><span id="dlAplics__ctl3_lbNConfVlCustoCorrecPosFim"></span></td><td align="center"><span id="dlAplics__ctl3_lbNConfVlPosFim">35.273,37</span></td><td align="center">0,002</td>
</tr><tr style="background-color:#FAEFCA;">
<td align="left"><span onclick="AbrirDet('CDADetAplic.aspx?PkCDAAplic=72375488')" style="cursor: hand; COLOR: olivedrab"><b></b> Cotas de Fundos<br/><b></b> HASHDEX NASDAQ ETHEREUM REFERENCE PRICE FUNDO DE ÍNDICE<br/></span></td><td align="center"><span id="dlAplics__ctl4_lbNConfAltTpNegoc"></span></td><td align="center"><span id="dlAplics__ctl4_lbNConfAltEmpLigada">Não</span></td><td align="center">23.967</td><td align="center"><span id="dlAplics__ctl4_lbNConfAltVlVendasNegoc">1.667.612,78</span></td><td align="center">209.290</td><td align="center"><span id="dlAplics__ctl4_lbNConfAltVlAquisNegoc">15.823.222,00</span></td><td align="center">142.956</td><td align="center"><span id="dlAplics__ctl4_lbNConfAltVlCustoCorrecPosFim"></span></td><td align="center"><span id="dlAplics__ctl4_lbNConfAltVlPosFim">11.436.480,00</span></td><td align="center">0,787</td>
</tr><tr style="background-color:Cornsilk;">
<td align="left"><span onclick="AbrirDet('CDADetAplic.aspx?PkCDAAplic=72375486')" style="cursor: hand; COLOR: olivedrab"><b></b> Cotas de Fundos<br/><b></b> HASHDEX NASDAQ CRYPTO INDEX FUNDO DE INDICE<br/></span></td><td align="center"><span id="dlAplics__ctl5_lbNConfTpNegoc"></span></td><td align="center"><span id="dlAplics__ctl5_lbNConfEmpLigada">Não</span></td><td align="center">628.668</td><td align="center"><span id="dlAplics__ctl5_lbNConfVlVendasNegoc">38.177.765,73</span></td><td align="center">634.819</td><td align="center"><span id="dlAplics__ctl5_lbNConfVlAquisNegoc">39.878.659,26</span></td><td align="center">87.530</td><td align="center"><span id="dlAplics__ctl5_lbNConfVlCustoCorrecPosFim"></span></td><td align="center"><span id="dlAplics__ctl5_lbNConfVlPosFim">5.487.255,70</span></td><td align="center">0,378</td>
</tr><tr style="background-color:#FAEFCA;">
<td align="left"><span onclick="AbrirDet('CDADetAplic.aspx?PkCDAAplic=72375484')" style="cursor: hand; COLOR: olivedrab"><b></b> Cotas de Fundos<br/><b></b> ISHARES S&amp;P 500 FUNDO DE INVESTIMENTO EM COTAS DE FUNDO DE ÍNDICE - INVESTIMENTO NO EXTERIOR<br/></span></td><td align="center"><span id="dlAplics__ctl6_lbNConfAltTpNegoc"></span></td><td align="center"><span id="dlAplics__ctl6_lbNConfAltEmpLigada">Não</span></td><td align="center">26.057</td><td align="center"><span id="dlAplics__ctl6_lbNConfAltVlVendasNegoc">7.285.144,24</span></td><td align="center">31.466</td><td align="center"><span id="dlAplics__ctl6_lbNConfAltVlAquisNegoc">8.871.406,46</span></td><td align="center">5.983</td><td align="center"><span id="dlAplics__ctl6_lbNConfAltVlCustoCorrecPosFim"></span></td><td align="center"><span id="dlAplics__ctl6_lbNConfAltVlPosFim">1.678.530,65</span></td><td align="center">0,116</td>
</tr><tr style="background-color:Cornsilk;">
<td align="left"><span onclick="AbrirDet('CDADetAplic.aspx?PkCDAAplic=72375640')" style="cursor: hand; COLOR: olivedrab"><b></b> Investimento no Exterior<br/><b>Nome do emissor: </b> CITCO - 376420,897566<br/><b>Venc.:</b> 31/12/2050<br/></span></td><td align="center"><span id="dlAplics__ctl7_lbNConfTpNegoc">Para<br/>negociação</span></td><td align="center"><span id="dlAplics__ctl7_lbNConfEmpLigada">Não</span></td><td align="center">0</td><td align="center"><span id="dlAplics__ctl7_lbNConfVlVendasNegoc">0,00</span></td><td align="center">0</td><td align="center"><span id="dlAplics__ctl7_lbNConfVlAquisNegoc">0,00</span></td><td align="center">376.421</td><td align="center"><span id="dlAplics__ctl7_lbNConfVlCustoCorrecPosFim"></span></td><td align="center"><span id="dlAplics__ctl7_lbNConfVlPosFim">257.652.646,82</span></td><td align="center">17,731</td>
</tr><tr style="background-color:#FAEFCA;">
<td align="left"><span onclick="AbrirDet('CDADetAplic.aspx?PkCDAAplic=72375755')" style="cursor: hand; COLOR: olivedrab"><b></b> Valores a pagar<br/><b>Descrição:</b> AURA33<br/><b>CNPJ do emissor:</b> 07.857.093/0001-14<br/><b>Denominação Social do emissor: </b> AURA MINERALS INC.<br/></span></td><td align="center"><span id="dlAplics__ctl8_lbNConfAltTpNegoc">Para<br/>negociação</span></td><td align="center"><span id="dlAplics__ctl8_lbNConfAltEmpLigada"></span></td><td align="center"></td><td align="center"><span id="dlAplics__ctl8_lbNConfAltVlVendasNegoc"></span></td><td align="center"></td><td align="center"><span id="dlAplics__ctl8_lbNConfAltVlAquisNegoc"></span></td><td align="center"></td><td align="center"><span id="dlAplics__ctl8_lbNConfAltVlCustoCorrecPosFim"></span></td><td align="center"><span id="dlAplics__ctl8_lbNConfAltVlPosFim">458.916,75</span></td><td align="center">-0,032</td>
</tr>
</tbody></table>

【讨论】:

这样做我会收到我 id 所在的所有 html 代码,对吗?但我还不知道如何将其转换为我的数据。我之前做的所有废料都是只有表格的页面,我对这条废料路径有点困惑。 没错。转换您的数据将注定要由asking a new question 保持这条轨道干净。 - 如果此答案或任何其他答案解决了您的问题,请将其标记为已接受 - someone-answers - 太好了 - 谢谢

以上是关于“AttributeError:‘str’对象没有属性‘descendants’错误,使用 bs4 和 selenium 进行自动抓取的主要内容,如果未能解决你的问题,请参考以下文章

SQLAlchemy“AttributeError:'str'对象没有属性'c'”

AttributeError 'str' 对象没有属性 'path'

Django 2.2 + AttributeError:'str'对象没有属性'decode'

为啥我得到 AttributeError:'str' 对象没有属性 'strftime'?

Django-channels:AttributeError:'str'对象没有属性'profile'

AttributeError:“str”对象没有属性“items”