最快的解决方案是在.find()方法中使用lambda。
例如:
import requests
from bs4 import BeautifulSoup
date1 = "20200506"
ticker = "AAPL"
URL = 'https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=' + ticker + '&type=&dateb=' + date1 + '&owner=exclude&count=40'
page = requests.get(URL)
soup = BeautifulSoup(page.content, 'html.parser')
results = soup.find(id='seriesDiv')
rows = results.find_all('tr')
for row in rows:
document = row.find(lambda t: t.name=='td' and ('10-Q' in t.text or '10-K' in t.text))
link = row.find('a', id="interactiveDataBtn")
if None in (document, link):
continue
print(document.text)
print('https://www.sec.gov' + link['href'])
同时打印10-Q 和10-K 链接:
10-Q
https://www.sec.gov/cgi-bin/viewer?action=view&cik=320193&accession_number=0000320193-20-000052&xbrl_type=v
10-Q
https://www.sec.gov/cgi-bin/viewer?action=view&cik=320193&accession_number=0000320193-20-000010&xbrl_type=v
10-K
https://www.sec.gov/cgi-bin/viewer?action=view&cik=320193&accession_number=0000320193-19-000119&xbrl_type=v
10-Q
https://www.sec.gov/cgi-bin/viewer?action=view&cik=320193&accession_number=0000320193-19-000076&xbrl_type=v
10-Q
https://www.sec.gov/cgi-bin/viewer?action=view&cik=320193&accession_number=0000320193-19-000066&xbrl_type=v
编辑:要只获得第一次出现,您可以使用字典。每次迭代检查字典中是否有键(字符串10-Q 或10-K),如果没有,添加它:
links = dict()
for row in rows:
document = row.find(lambda t: t.name=='td' and ('10-Q' in t.text or '10-K' in t.text))
link = row.find('a', id="interactiveDataBtn")
if None in (document, link):
continue
if document.text not in links:
links[document.text] = 'https://www.sec.gov' + link['href']
print(links)
打印:
{'10-Q': 'https://www.sec.gov/cgi-bin/viewer?action=view&cik=320193&accession_number=0000320193-20-000052&xbrl_type=v',
'10-K': 'https://www.sec.gov/cgi-bin/viewer?action=view&cik=320193&accession_number=0000320193-19-000119&xbrl_type=v'}