为什么.get('href')在bs4.element.tag上返回“ None”?

时间:2019-02-18 15:08:46

标签: python-3.x beautifulsoup

我正在整理一个数据集以进行分析。目的是解析SEC网页上的表,并在其中包含文本“ SC 13D”的行中拉出链接。这需要是可重复的,因此我可以在数据库中拥有的大量链接中将其自动化。我知道这段代码不是最Python的代码,但是我将它们一起砍掉了,以便从表中获得所需的东西,但表行中的链接除外。如何从表格行中提取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'))

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

2 个答案:

答案 0 :(得分:1)

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

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

print(a_element.get('href'))

答案 1 :(得分:0)

将您的.get切换为.find

您要找到<a>标签,并打印href属性

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

或者您需要在标签上使用.get

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