#python #selenium #web-scraping #beautifulsoup
Вопрос:
Я пытаюсь соскрести футбольные результаты с 8 страниц онлайн. По какой-то причине мой код дважды соскабливает результаты с первой страницы, он продолжает соскабливать следующие 6 страниц, как и положено, а затем опускает последнюю страницу.
Вот мой код
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
import time
import requests
import numpy as np
chrome_options = Options()
chrome_options.add_argument('headless')
driver = webdriver.Chrome(options=chrome_options)
wait = WebDriverWait(driver, 10)
scores = []
for i in range(1,9,1):
url = 'https://www.oddsportal.com/soccer/england/premier-league-2020-2021/results/#/page/' str(i) '/'
time.sleep(5)
driver.get(url)
soup = BeautifulSoup(driver.page_source, 'lxml')
main_table = soup.find('table', class_ ='table-main')
rows_of_interest = main_table.find_all('tr', class_ = ['odd deactivate', 'deactivate'])
score = row.find('td', class_ = 'center bold table-odds table-score').text
scores.append(score)
Помощь была бы очень признательна
Редактировать:
Я исправил это, сдвинув петлю вверх на 1
for i in range(2,10,1):
Я до сих пор понятия не имею, почему это работает, потому что номера страниц 1-8
Комментарии:
1. Попробуйте поставить
time.sleep(5)
«послеdriver.get(url)
«, » доsoup = BeautifulSoup(driver.page_source, 'lxml')
» с оригиналомfor i in range(1,9,1):
и дайте мне знать, если это устранит проблему.2. Привет, да, это так! Это почему? Спасибо
Ответ №1:
Вы должны установить задержку между driver.get(url)
и soup = BeautifulSoup(driver.page_source, 'lxml')
для загрузки новой страницы.
Без этого первая итерация считывает первую страницу правильно, так soup = BeautifulSoup(driver.page_source, 'lxml')
как действие ожидает загрузки страницы (любой), прежде чем удалять ее содержимое, но во второй итерации вы снова прочитаете содержимое первой страницы, так как вторая страница все еще не загружена.
time.sleep(5)
Команда в неправильном расположении приведет к очистке всех следующих страниц, но с задержкой в 1 итерацию, в результате чего последняя страница не будет очищена.
С задержкой в нужном месте он будет работать правильно
for i in range(1,9,1):
url = 'https://www.oddsportal.com/soccer/england/premier-league-2020-2021/results/#/page/' str(i) '/'
driver.get(url)
time.sleep(5)
soup = BeautifulSoup(driver.page_source, 'lxml')