Scrapy не возвращает правильные данные с более широким диапазоном, но делает, когда диапазон сжат - PullRequest
0 голосов
/ 06 октября 2019

Я работаю над личным проектом и в Интернете собираю название команды сайта, например: 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 / Шоу / Англия-Лестер», но для некоторыхкак только моя попытка / кроме не ловит его.

...