python-3.x - 为什么 .get('href') 在 bs4.element.tag 上返回“None”?
问题描述
我正在汇总一个数据集进行分析。目标是解析 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'))
预期的结果是打印出链接元素中的链接。实际结果是“无”。
解决方案
这是因为您的a
标签在您的td
标签内您只需要做:
linkelement = rows[linkpos]
a_element = linkelement.find('a')
print(a_element.get('href'))
推荐阅读
- python - 如果列包含存储在另一个数据框中的字符串,则计算列的总和
- java - 使用 Jackson 将 YAML 的子树映射到 POJO
- apache-kafka - 检查 Kafka 流线程的运行状况
- php - PHP中的错误计算
- python - 如何在 x 轴上的 python seaborn 中添加 coocurrences?
- python - 我没有使用 Scrapy 获得所有产品描述数据
- active-directory - Active Directory 帐户不断被禁用
- stored-procedures - 有没有办法在 PL/SQL 中背靠背地运行多个过程,以便创建一个表,然后按照我的代码中的结构进行填充?
- linux - 从所有子目录中删除除最新文件之外的所有文件
- winapi - 以编程方式在 Windows 中设置 HTTP 代理