Я пытаюсь почерпнуть новости из skynewsarabia.com
class SkyNewsSportsSpider(scrapy.Spider):
name = 'sky_news_sports'
sport = "https://www.skynewsarabia.com/sport/"
custom_settings = {
'FEED_EXPORT_FIELDS': ["article_content", "tags"],
}
allowed_domains = ['www.skynewsarabia.com']
first_token = "1569266773000"
scrape_this_link = "https://api.skynewsarabia.com//rest/v2/latest.json?defaultSectionId=6&nextPageToken={}&pageSize=20&types=ARTICLE"
start_urls = [scrape_this_link.format(first_token)]
urls = []
def parse(self, response):
articles = json.loads(response.text)
# to get the link for each article we need to combine both the id and the urlFriendlySuffix in one link
for article in range(0, len(articles["contentItems"])):
article_id = articles["contentItems"][article]["id"]
article_url = articles["contentItems"][article]["urlFriendlySuffix"]
relative_link = article_id + "-" + article_url
full_link = self.sport + relative_link
self.urls.append(full_link)
for url in self.urls:
yield scrapy.Request(url=url, callback=self.parse_details)
self.urls = []
print("Before Check")
self.first_token = articles["nextPageToken"]
if self.first_token is not None:
next_page = self.scrape_this_link.format(self.first_token)
print("I am inside!")
print(next_page)
yield response.follow(url=next_page, callback=self.parse)
def parse_details(self, response):
pass
Основная идея заключается в том, что вы сначала очищаете ссылку, содержащую 20 ссылок. кроме того, у первой ссылки есть также токен для следующей ссылки, который нужно добавить к следующему URL, чтобы вы могли очистить следующие 20 ссылок. Однако проблема, с которой я сталкиваюсь, заключается в том, что при первом запуске сценария он берет следующий токен, получает все ссылки этого токена и затем останавливается! так что я всего лишь соскабливаю 20 ссылок! когда я печатаю first_token, он дает мне что-то отличное от 1569266773000, что предусмотрено в скрипте по умолчанию. Тем не менее, тот же сценарий работает отлично, когда у меня есть счетчик и просто увеличить этот счетчик self.counter += 1