Я пробую получать информацию о страницах всех соединений этого Веба. Я использую BeautifulSoup и Selenium. Проблема, которая у меня есть, состоит в том, что я не могу получать все соединения страницы, чтобы после соглашаться на них и получать информацию о каждой из Ваших страниц.
Это кодекс:
from bs4 import BeautifulSoup as soup
from selenium import webdriver
import time
url_meva = "https://www.recetasgratis.net"
navegador = webdriver.Chrome()
navegador.get(url_meva)
html = navegador.page_source
element_boto = navegador.find_element_by_xpath("/html/body/div[1]/div[3]/div[1]/div[2]/button")
element_boto.click()
last_height = 0
new_height = 1
while last_height < new_height:
last_height = navegador.execute_script("return document.body.scrollHeight")
time.sleep(2)
print("last height: ", last_height)
navegador.execute_script("return document.body.scrollBy(0,1000)")
new_height = navegador.execute_script("return document.body.scrollHeight")
print("new height: ", new_height)
total_receptes = navegador.execute_script('''
var total = document.getElementsByClassName('bloque link').length;
return total;
''')
receptes = []
for item in range(total_receptes):
desc_item = navegador.execute_script(f'''
var desc = document.getElementsByClassName('bloque link')[{item}].getElementsByTagName('img')[0].getAttribute('alt');
return desc;
''')
href_item = navegador.execute_script(f'''
var href = document.getElementsByClassName('bloque link')[{item}].getElementsByTagName('img')[0].getAttribute('src');
return href;
''')
receptes.append([desc_item,href_item])
print(total_receptes)
То, что я хочу сделать как первый шаг состоит в том, чтобы охранять все соединения, которые появляются на начальной странице, чтобы после открывать их одному один и получать информацию о страницах.
Он не дает мне никакой ошибки. Проблема состоит в том, что на начальной странице не появляются все соединения. Нужно нажимать пуговицу Quiero ver больше для того, чтобы были загружены соединения по мере того, как ты делаешь scroll. Несмотря на то, что я кликаю в вышеупомянутой пуговице я не могу увидеть все соединения.
Проблема состоит в том, что я не знаю, как способствовать тому, чтобы у переменной new_height было новое значение, сделав scroll. Чтобы делать scroll я использую боевую группу javascript scrollBy (). Но назначив это в new_height используя scrollHeight, () Вы не назначаете это мне. Значения new_height и last_height заканчивают тем, что являются равными во втором повторении.
Как я могу упорядочивать это?
Спасибо
Хороший я попробую помогать тебе, чтобы начинаться, не докуда он подходит близко делая scroll
в этой pГЎgina. AsГ - что подобно примеру, я сделал простого scroll
5 раз каждый 1seg. Ты можешь использовать Selenium
, чтобы выполнять cГіdigo javascript
с .execute_script
url_meva = "https://www.recetasgratis.net"
browser.get(url_meva)
Click в кнопке "Я хочу видеть mГЎs":
browser.execute_script('''
document.getElementsByClassName('boton l margin-bottom-3')[0].click();
''')
last_height = browser.execute_script("return document.body.scrollHeight")
SCROLL_DOWN = 5
for _ in range(SCROLL_DOWN):
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
new_height = browser.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
#Obtener la cantidad de recetas
cantidad_recetas = browser.execute_script('''
var cantidad = document.getElementsByClassName('bloque link').length;
return cantidad;
''')
recetas = []
for item in range(cantidad_recetas):
desc_item = browser.execute_script(f'''
var desc = document.getElementsByClassName('bloque link')[{item}].getElementsByTagName('img')[0].getAttribute('alt');
return desc;
''')
href_item = browser.execute_script(f'''
var href = document.getElementsByClassName('bloque link')[{item}].getElementsByTagName('img')[0].getAttribute('src');
return href;
''')
recetas.append([desc_item,href_item])
Ну, что я делаю в первом for
, он состоит в том, чтобы делать scroll
. Если ты хочешь загрузиться mГЎs, только ты должен изменять переменную SCROLL_DOWN
. Потом мы ищем количество items
, у которого есть она pГЎgina, и добавляем их к списку. Я надеюсь, что он ты помогает.
pd: в тебя navegador
, это definГ - как browser
И ты можешь сохранять это в одном excel
таким образом:
df = pd.DataFrame(recetas)
df.to_excel('recetas.xlsx')
.to_excel()
Получает как параметр, каталог, где хочешь сохранять ты .xlsx
ActualizaciГіn:
, Если ты хочешь получить все соединения ее pГЎgina, только ты должен делать loop, сходный со следующим, где sГіlo romperГЎ, когда уже не будет возможно делать scroll
. Таким образом, deberГ, - чтобы тебя функционировать:
last_height = browser.execute_script("return document.body.scrollHeight")
while True:
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
#se puede agregar un sleep mas alto si no llega a cargar a tiempo.
time.sleep(5)
new_height = browser.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
, дав ему один KeyboardInterrupt
, я получил 13.000 средств после нескольких минут.
OpciГіn 2:
Другая soluciГіn, что со мной случается, может состоять в том, чтобы использовать timedelta
, и делать scroll
определенное время, которое ты перемещал бы его из-за параметра, пример может быть следующим:
В этом случае harГЎ scroll
в течение 35 минут. Если ты хочешь распределить mГЎs время (например час, ты должен проходить с ним по параметру "hour = X", я чувствую X количество часов).
from datetime import timedelta
import datetime
start = datetime.datetime.now() + timedelta(minutes = 35)
while start >= datetime.datetime.now():
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
и потом получать количество средств:
#Obtener la cantidad de recetas
cantidad_recetas = browser.execute_script('''
var cantidad = document.getElementsByClassName('bloque link').length;
return cantidad;
''')
recetas = []