Объект ResultSet не имеет атрибута get - PullRequest
0 голосов
/ 08 марта 2020

Привет! В настоящее время я пытаюсь очистить эту https://www.sec.gov/ix?doc= / Archives / edgar / data / 1090727/000109072720000003 / form8-kq42019earningsr.htm SE C ссылку с beautifulsoup, чтобы получить ссылку, содержащую " UPS "

pressting = soup3.find_all("a", string="UPS")
linkkm = pressting.get('href')
print(linkkm)

Но когда я делаю это, я получаю эту ошибку:

Traceback (most recent call last):
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python36\SEC.py", line 55, in <module>
    print('Price: ' + str(edgar()))
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python36\SEC.py", line 46, in edgar
    linkkm = pressting.get('href')
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\bs4\element.py", line 2081, in __getattr__
    "ResultSet object has no attribute '%s'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?" % key
AttributeError: ResultSet object has no attribute 'get'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?

Мой ожидаемый результат - извлечь href и затем напечатать этот href. Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 08 марта 2020

Как правило, страница динамически отображается с помощью JavaScript после загрузки. таким образом, вы не сможете анализировать объекты, пока не сделаете это в первую очередь. Поэтому модуль requests не будет отображать JavaScript.

Вы можете использовать selenium подход для достижения этой цели. в противном случае вы можете использовать HTMLSession из html_request модуля для его рендеринга на лету.

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from bs4 import BeautifulSoup
import re
from time import sleep

options = Options()
options.add_argument('--headless')
driver = webdriver.Firefox(options=options)

driver.get("https://www.sec.gov/ix?doc=/Archives/edgar/data/1090727/000109072720000003/form8-kq42019earningsr.htm")

sleep(1)
soup = BeautifulSoup(driver.page_source, 'html.parser')

for item in soup.findAll("a", style=re.compile("^text")):
    print(item.get("href"))

driver.quit()

Вывод:

https://www.sec.gov/Archives/edgar/data/1090727/000109072720000003/exhibit991-q42019earni.htm
https://www.sec.gov/Archives/edgar/data/1090727/000109072720000003/exhibit992-q42019finan.htm

Однако, если вам нужен только первый URL;

url = soup.find("a", style=re.compile("^text")).get("href")
print(url)

Вывод:

https://www.sec.gov/Archives/edgar/data/1090727/000109072720000003/exhibit991-q42019earni.htm
0 голосов
/ 08 марта 2020

Ваша проблема в том, что soup3.find_all () возвращает список результатов, и вы пытаетесь использовать метод .get () в этом списке, когда предполагается использовать его только для одного элемента.

Попробуйте что-то вроде итерации по ним и распечатайте каждый из них:

pressting = soup3.find_all("a", string="UPS")
for i in pressting:
    print(i.get('href'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...