Функция из списка параметров - PullRequest
0 голосов
/ 13 октября 2019

Не могли бы вы помочь мне с моим кодом Python? Я хотел проанализировать несколько домашних страниц с красивым супом, представленным в списке html, с помощью функции stars

html=["https://www.onvista.de/aktien/fundamental/Adidas-Aktie-DE000A1EWWW0", "https://www.onvista.de/aktien/fundamental/Allianz-Aktie-DE0008404005", "https://www.onvista.de/aktien/fundamental/BASF-Aktie-DE000BASF111"]

def stars(html):
    bsObj = BeautifulSoup(html.read())
    starbewertung = bsObj.findAll("section")[8].findAll("div")[1].findAll("span")[16]

    str_cells = str(starbewertung)
    cleantext = BeautifulSoup(str_cells, "lxml").get_text()
    print(cleantext)


    lst=[]
    lst.append(cleantext)

stars(html)

Вместо этого я получаю сообщение об ошибке «AttributeError: у объекта« list »нет атрибута« read »»

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

У вас есть несколько ошибок здесь.

  1. вы пытаетесь загрузить весь список страниц в BeautifulSoup. Вы должны обрабатывать страницу за страницей.

  2. Вы должны получить исходный код страницы перед обработкой.

  3. нет "раздела"элемент на странице, которую вы загружаете, поэтому вы получите исключение при попытке получить 8-й элемент. Поэтому вам, возможно, придется оценить, нашли ли вы что-нибудь.

def stars(html):
    request = requests.get(html)
    if request.status_code != 200:
        return
    page_content = request.content
    bsObj = BeautifulSoup(page_content)
    starbewertung = bsObj.findAll("section")[8].findAll("div")[1].findAll("span")[16]

    str_cells = str(starbewertung)
    cleantext = BeautifulSoup(str_cells, "lxml").get_text()
    print(cleantext)

for page in html:
    stars(page)
0 голосов
/ 13 октября 2019

Как некоторые из упомянутых комментариев, вам нужно использовать библиотеку запросов , чтобы фактически получить содержимое каждой ссылки в вашем списке.

import requests
from bs4 import BeautifulSoup

html=["https://www.onvista.de/aktien/fundamental/Adidas-Aktie-DE000A1EWWW0", "https://www.onvista.de/aktien/fundamental/Allianz-Aktie-DE0008404005", "https://www.onvista.de/aktien/fundamental/BASF-Aktie-DE000BASF111"]

def stars(html):
    for url in html:
        resp = requests.get(url)
        bsObj = BeautifulSoup(resp.content, 'html.parser')
        print(bsObj) # Should print the entire html document.
        # Do other stuff with bsObj here.

stars(html)

Ошибка IndexEr bsObj.findAll("section")[8].findAll("div")[1].findAll("span")[16]что-то, что вам нужно выяснить самостоятельно.

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