Не удается получить все заголовки из списка с помощью Python WebScraping

#python #selenium

#python #selenium

Вопрос:

Я практикую веб-очистку с помощью Python atm, и я обнаружил проблему, я хотел очистить один веб-сайт, на котором есть список аниме, которые я смотрел раньше, но когда я пытаюсь очистить его (через запросы или selenium), он получает только около 30 из 110 названий аниме со страницы. Вот мой код с selenium:

 from selenium import webdriver
from bs4 import BeautifulSoup

browser = webdriver.Firefox()
browser.get("https://anilist.co/user/Agusmaris/animelist/Completed")
data = BeautifulSoup(browser.page_source, 'lxml')
for title in data.find_all(class_="title"):
    print(title.getText())
  

И когда я запускаю его, исходный код страницы отображается только до аниме под названием «Золотое время», когда на странице осталось около 70 или более.

Спасибо

Редактировать: Код, который теперь работает благодаря ‘supputuri’:

 from selenium import webdriver
from bs4 import BeautifulSoup
import time

driver = webdriver.Firefox()
driver.get("https://anilist.co/user/Agusmaris/animelist/Completed")
time.sleep(3)
footer = driver.find_element_by_css_selector("div.footer")
preY = 0
print(str(footer))
while footer.rect['y'] != preY:
    preY = footer.rect['y']
    footer.location_once_scrolled_into_view
    print('loading')
html = driver.page_source
soup = BeautifulSoup(html, 'lxml')
for title in soup.find_all(class_="title"):
    print(title.getText())
driver.close()
driver.quit()
ret = input()
  

Комментарии:

1. Вероятно, это проблема со временем, убедитесь, что вы получите код после того, как все будет загружено и отрисовано. Существует также другой способ, вы можете запросить JSON API anilist.co/graphql вместо всего веб-сайта.

2. @Mr.bug Я думаю, что это спам-сайт, смотрите Мой ответ ниже

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

4. Извините, я не обвиняю вас напрямую, но мне кажется, что в этом веб-сайте есть что-то подозрительное.

5. Ваш код пытается получить все строки?

Ответ №1:

Вот решение. Обязательно добавьте import time

 driver.get("https://anilist.co/user/Agusmaris/animelist/Completed")
time.sleep(3)
footer =driver.find_element_by_css_selector("div.footer")
preY =0
while footer.rect['y']!=preY:
    preY = footer.rect['y']
    footer.location_once_scrolled_into_view
    time.sleep(1)
print(str(driver.page_source))
  

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

Комментарии:

1. Это сработало! Большое вам спасибо! Извините, если прошу слишком многого, но есть ли способ удалить эту страницу только с помощью модуля requests? Поэтому не обязательно открывать браузер и все такое прочее

2. Я посмотрю, используя модуль requests, возможно, завтра.

Ответ №2:

Итак, это суть того, что я получаю при загрузке исходного кода страницы:

AniListwindow.al_token = ‘E1lPa1kzYco5hbdwT3GAMg3OG0rj47Gy5kF0PUmH’; Извините, для AniList требуется Javascript.
Пожалуйста, включите Javascript или http://outdatedbrowser.com > обновитесь до современного веб-браузера.Извините, для AniList требуется современный браузер.
Пожалуйста http://outdatedbrowser.com > обновитесь до более нового веб-браузера.

Поскольку я чертовски хорошо знаю, что Javascript включен, и моя версия Chrome полностью обновлена, а указанный URL-адрес ведет на небезопасный веб-сайт для «загрузки» новой версии вашего браузера, я думаю, что это спам-сайт. Не уверен, знали ли вы об этом при публикации, поэтому я не буду отмечать это как таковое, но я хотел, чтобы вы и другие, кто сталкивался с этим, были в курсе.

Комментарии:

1. Я получаю то же самое, когда запускаю его с помощью модуля requests, и нет, это не спам…

2. Ну, в любом случае, это то, что является исходным кодом страницы, поэтому я не думаю, что вы сможете получить больше, чем это.