Python Parsing. 'bool' object has no attribute 'json'
Я пытался соединить 2 кода. 1:
import requests
url = 'https://api.nasdaq.com/api/quote/NVDA/summary?assetclass=stocks'
headers = {'user-agent': '.....'}
r = requests.get(url, headers=headers)
data = r.json()['data']['summaryData']['Yield']['value']
print(data)
и 2:
import requests
from bs4 import BeautifulSoup
import os
HEADERS = {'user-agent': '.....', 'accept': '*/*'}
def get_html(url, params=None):
r = requests.get(url, headers=HEADERS, params=params)
return r
def get_content(html):
soup = BeautifulSoup(html, 'html.parser')
items = soup.find_all('div', class_='page__content')
r = True
something = []
for item in items:
something.append({
'name': item.find('span', class_='symbol-page-header__name').get_text(strip=True),
})
print(something)
def parse():
URL = []
print("URL: ", end='')
while True:
data = input()
if data == "":
break
URL.append(data)
for i in URL:
html = get_html(i.strip())
if html.status_code == 200:
something = get_content(html.text)
else:
print('Error')
parse()
Я пытался это все склеить:
import requests
from bs4 import BeautifulSoup
import os
HEADERS = {'user-agent': '....', 'accept': '*/*'}
def get_html(url, params=None):
r = requests.get(url, headers=HEADERS, params=params)
return r
def get_content(html):
soup = BeautifulSoup(html, 'html.parser')
items = soup.find_all('div', class_='page__content')
r = True
something = []
for item in items:
something.append({
'name': item.find('span', class_='symbol-page-header__name').get_text(strip=True),
'data': r.json()['data']['summaryData']['Yield']['value'],
})
print(something)
def parse():
URL = []
print("URL: ", end='')
while True:
data = input()
if data == "":
break
URL.append(data)
for i in URL:
html = get_html(i.strip())
if html.status_code == 200:
something = get_content(html.text)
else:
print('Error')
parse()
И тут выводится ошибка
URL: 'bool' object has no attribute 'json'
Трассировка стека:
> File "E:\Parsing\ParsingNasdaqV.2\ParsingNasdaqV.2\ParsingNasdaqV.2.py", line 23, in get_content
> 'data': r.json()['data']['summaryData']['Yield']['value'],
> File "E:\Parsing\ParsingNasdaqV.2\ParsingNasdaqV.2\ParsingNasdaqV.2.py", line 46, in parse
> something = get_content(html.text)
> File "E:\Parsing\ParsingNasdaqV.2\ParsingNasdaqV.2\ParsingNasdaqV.2.py", line 50, in <module>
(Current frame)
> parse()
Модуль "__main__" загружен
Модуль "runpy" загружен
Программа "python.exe" завершилась с кодом -1 (0xffffffff).
Как можно это исправить, чтобы был вывод 2 значений. Вот сам сайт: https://www.nasdaq.com/market-activity/stocks/nvda Спасибо!
Ответы (1 шт):
Автор решения: NEWME0
→ Ссылка
Во первых обрати внимание на то что тебе нужно сделать два запроса:
- https://api.nasdaq.com/api/quote/NVDA/summary?assetclass=stocks
- https://www.nasdaq.com/market-activity/stocks/nvda
Первый запрос возвращает JSON данные а второй HTML.
Я так понял (могу ошибаться) с первой страницы достать:
json['data']['summaryData']['Yield']['value'] # какое то значение
а со второй:
soup.find('span', class_='symbol-page-header__name') # название компании
Если так то код примерно такой:
import bs4
import requests
def main():
headers = {'user-agent': '.....', 'accept': '*/*'}
# Первую парсим как JSON
url_1 = 'https://api.nasdaq.com/api/quote/NVDA/summary?assetclass=stocks'
response_1 = requests.get(url_1, headers=headers)
content_1 = response_1.json()
data_1 = content_1['data']['summaryData']['Yield']['value']
print(data_1)
# Вторую парсим как HTML
url_2 = 'https://www.nasdaq.com/market-activity/stocks/nvda'
response_2 = requests.get(url_2, headers=headers)
content_2 = bs4.BeautifulSoup(response_2.text, 'html.parser')
data_2 = content_2.find('span', class_='symbol-page-header__name').get_text(strip=True)
print(data_2)
main()
