【问题标题】:Why is the .get('href') returning "None" on a bs4.element.tag?为什么 .get('href') 在 bs4.element.tag 上返回“None”?
【发布时间】:2019-02-18 15:08:46
【问题描述】:

我正在汇总一个数据集进行分析。目标是解析 SEC 网页上的表格,并在其中包含文本“SC 13D”的行中提取链接。这需要是可重复的,因此我可以在数据库中的大量链接列表中自动执行它。我知道这段代码不是最 Pythonic 的,但我把它拼凑起来,从表格中得到我需要的东西,除了表格行中的链接。如何从表格行中提取 href 值?

我尝试在表中的“tr”而不是“td”上执行 .findAll(第 15 行),但无法弄清楚如何在“SC 13D”上搜索并从表行列表中弹出元素,如果我执行了 .findAll('td')。我还尝试使用 .get('a) 而不是 .get('href') (包含在代码中,第 32 行)获取带有链接的锚标记,但它也返回“None”。

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

url = 'https://www.sec.gov/Archives/edgar/data/1050122/000101143807000336/0001011438-07-000336-index.htm'

html = urllib.request.urlopen(url, context=ctx).read()
soup = BeautifulSoup(html, 'html.parser')
table = soup.find('table',{'summary':'Document Format Files'})
rows = table.findAll("td")

i = 0
pos = 0
for row in rows:
    if "SC 13D" in row:
        pos = i
        break
    else: i = i + 1

linkpos = pos - 1

linkelement = rows[linkpos]

print(linkelement.get('a'))
print(linkelement.get('href'))

预期的结果是打印出链接元素中的链接。实际结果为“无”。

【问题讨论】:

    标签: python-3.x beautifulsoup


    【解决方案1】:

    这是因为您的a 标签在您的td 标签内 你只需要这样做:

    linkelement = rows[linkpos]
    a_element = linkelement.find('a')
    
    print(a_element.get('href'))
    

    【讨论】:

      【解决方案2】:

      将您的 .get 切换为 .find

      你想找到<a>标签,并打印href属性

       print(linkelement.find('a')['href'])
      

      或者你需要在标签中使用.get

      print(linkelement.a.get('href'))
      

      【讨论】:

        猜你喜欢
        • 2022-01-21
        • 1970-01-01
        • 2013-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-22
        相关资源
        最近更新 更多