Я работаю над личным проектом и в Интернете собираю название команды сайта, например: https://www.whoscored.com/Teams/14
Поскольку я ищу сотни имен, я рассчитал цикл for, используя диапазонбыло бы лучше, поскольку «ядро» ссылки распределяется между всеми командами (https://www.whoscored.com/Teams/). Теперь, если использовать диапазон (1,16), оно получит правильные первые 6. На 6, когда первое значение IЯ ищу, существует, он не существует с интервалами 7-9, и следующее значение возвращается с интервалом 10. Но он не возвращает значение для 10, он просто говорит, что значение не существует.
Я прошел все команды (1-20 для тестирования), и все они используют один и тот же формат HTML для названия команды, так что с этой частью все в порядке. Я действительно понятия не имею, как еще это исправить, поскольку я новичок вscrappy и web-scraping. Я также создал проект с использованием scrapy, чтобы были «типичные» файлы.
import scrapy
from time import sleep
from random import randint
from bs4 import BeautifulSoup as bs
class SoccerSpider(scrapy.Spider):
name = "SoccerSpider"
def start_requests(self):
urls = [
'https://www.whoscored.com/Teams/',
]
for url in urls:
for i in range(1,15):
sleep(randint(10,14))
yield scrapy.Request(url=url+str(i), callback =self.parse)
def parse(self, response):
contents = response.body
soup = bs(contents, 'lxml')
try:
link = soup.find('div',
class_ = 'team-profile-side-box').a['href']
page = link.split('/')[-1]
except:
page = 'NaN'
filename = 'soccer-%s.html' % page
with open('./Soccer_html/'+filename, 'wb') as f:
f.write(response.body)
self.log('Saved file %s' % filename)
print(f'Saved File {filename}')
Ожидаемый результат должен быть именем команды из html-кода. Для ссылки выше это должно быть«Команды / 14 / Шоу / Англия-Лестер», но для некоторыхкак только моя попытка / кроме не ловит его.