красивый суп найти ссылку в таблице, указав две вещи - PullRequest
0 голосов
/ 30 июня 2018

Как мне получить полученный URL: https://www.sec.gov/Archives/edgar/data/1633917/000163391718000094/0001633917-18-000094-index.htm

... с этой страницы ...

https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001633917&owner=exclude&count=40

... указав date = '2018-04-25 и я хочу 8-k для подачи? Должен ли я выполнить цикл или есть один код, который даст мне результат?

from bs4 import BeautifulSoup
from bs4.element import Comment
import requests

date='2018-04-25'
CIK='1633917'

url = 'https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=' + CIK + '&owner=exclude&count=100'
r = requests.get(url)
soup = BeautifulSoup(r.text,'html.parser')
a=soup.find('table', class_='tableFile2').findAll('tr')
for i in a:
    print i

1 Ответ

0 голосов
/ 30 июня 2018

Нет одного кода лайнера, чтобы получить то, что вы хотите. Вам придется пройтись по строкам, а затем проверить, совпадают ли значения.

Но есть немного лучший подход, который сужает ряды. Вы можете напрямую выбрать строки, которые соответствуют одному из значений. Например, вы можете выбрать все строки, которые имеют date = '2018-04-25', а затем проверить соответствие файла.

Код:

for date in soup.find_all('td', text='2018-04-25'):
    row = date.find_parent('tr')
    if row.td.text == '8-K':
        link = row.a['href']
        print(link)

Выход:

/Archives/edgar/data/1633917/000163391718000094/0001633917-18-000094-index.htm

Таким образом, здесь вместо циклического перебора всех строк вы просто перебираете строки, содержащие желаемую дату. В этом случае есть только одна такая строка, и, следовательно, мы выполняем цикл только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...