Web Scraper - AttributeError: у объекта 'NoneType' нет атрибута 'текст' - PullRequest
0 голосов
/ 20 декабря 2018

Привет! Я пытаюсь создать веб-скребок для верхней части манги myanimelist (https://myanimelist.net/topmanga.php) с использованием Beautifulsoup и запросов. Моя проблема в том, что я получаю этот код ошибки:

Traceback (most recent call last):
  File "C:/Kaan/Proje/Python/Programlar/Manga/manga2.py", line 119, in <module>
    mangainfo(new_url)
  File "C:/Kaan/Proje/Python/Programlar/Manga/manga2.py", line 29, in mangainfo
    names.append(name.text)
AttributeError: 'NoneType' object has no attribute 'text'

Я понимаю этот код ошибки, но что я не понимаю, так это то, что я получаю это наугад. Допустим, я получаю эту ошибку на манге № 20. Если я снова запускаю программу, код может работать до манги 200, а затем выдавать ошибку. Пока я писалпри этом я снова запускаю программу и получаю ошибку на манге 140.

Как мне решить эту проблему? Это происходит из-за моего кодирования или возможно из-за сайта?

import requests
from bs4 import Tag, BeautifulSoup
time import time 

url = "https://myanimelist.net/topmanga.php"

def mangainfo(url):
    manga_id, scores, manga_genre, names, authors = list(), list(), list(), list(), list()
    r = requests.get(url)
    c = r.content
    soup2 = BeautifulSoup(c, "html.parser")
    # Manga Links
    manga_links = soup2.find_all("a", class_="hoverinfo_trigger fs14 fw-b")
    count = 0
    for link in manga_links:
        start = time()
        r = requests.get(link["href"])
        c = r.content
        soup = BeautifulSoup(c, "html.parser")

        # Names
        name = soup.find("h1", class_="h1")
        names.append(name.text)

        # Scores
        score = soup.find("div", class_="fl-l score")
        scores.append(str(score.text.strip()))

        # Manga ID
        for x in link["href"].split("/"):
            if x.isdigit():
                manga_id.append(int(x))
                break

        # Manga Genres
        genre = soup.find("span", text="Genres:")
        manga_genre.append([x.text for x in genre.next_siblings if isinstance(x, Tag)])

        # Authors
        author = soup.find("span", text="Authors:")
        authors.append([x.text for x in author.next_siblings if isinstance(x, Tag)])

        stop = time()
        count += 1
        print("{} - Time: {:.2f} Link: {} ==> OK".format(count, stop - start, link["href"]))

for i in range(0, 46651, 50):  # 46651 limit
    new_url = url + "?limit=" + str(i)
    print("Sayfa: {} ===>  {}".format(str(i), new_url))
    start_time = time()
    mangainfo(new_url)
    stop_time = time()
    print("MangaInfo Time: {:.2f}".format(stop_time - start_time))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...