Здравствуйте, я новичок в scrapy и пытаюсь удалить сайт https://socialblade.com/, чтобы получить идентификатор канала mostviewed
и mostsubscribed
youtuber страны.
Я делаю это, нажимая на ссылку youtuber на главной странице листинга (например, https://socialblade.com/youtube/top/country/pk/mostsubscribed).. Затем открывается новая страница, а последняя часть новой открытой страницы содержит идентификатор канала (например, ).https://socialblade.com/youtube/channel/UC4JCksJF76g_MdzPVBJoC3Q).
Вот мой код:
import scrapy
class SocialBladeSpider(scrapy.Spider):
name = "socialblade"
def start_requests(self):
urls = [
'https://socialblade.com/youtube/top/country/pk/mostviewed',
'https://socialblade.com/youtube/top/country/pk/mostsubscribed'
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse_url(self, response):
data = {
'url': response.url.split('/')[-1],
'displayName': response.css('div#YouTubeUserTopInfoBlockTop div h1::text').extract_first()
}
yield {
response.meta['country']: {
response.meta['key']: data
}
}
def parse(self, response):
key = response.url.split("/")[-1]
country = response.url.split("/")[-2]
for a in response.css('a[href^="/youtube/user/"]'):
request = scrapy.Request(url='https://socialblade.com' + a.css('::attr(href)').extract_first(), callback=self.parse_url)
request.meta['key'] = key
request.meta['country'] = country
yield request
Проблема: после удаления этих двух URL я должен получить всего 500 записей. Но я получаю только 348 записей.выполнил НИОКР, но не смог найти решение.
(Пожалуйста, помогите мне решить эту проблему)