Web scraping 刮https://socialblade.com/

Web scraping 刮https://socialblade.com/,web-scraping,scrapy,Web Scraping,Scrapy,我对Scrapy是个新手,我正试图通过Scrapy网站获取一个国家浏览量和订阅量最多的YouTube的频道id 我这样做的方式是点击主列表页面上的YouTube链接(例如)。然后打开一个新页面,新打开页面的最后一部分包含频道id(例如) 这是我的密码: import scrapy class SocialBladeSpider(scrapy.Spider): name = "socialblade" def start_requests(self):

我对Scrapy是个新手,我正试图通过Scrapy网站获取一个国家浏览量和订阅量最多的YouTube的频道id

我这样做的方式是点击主列表页面上的YouTube链接(例如)。然后打开一个新页面,新打开页面的最后一部分包含频道id(例如)

这是我的密码:

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张唱片。我做了研发,但找不到解决方案


有人对如何解决这个问题有什么建议吗?

如果您不想过滤掉重复的请求,请将
dont\u filter=True
传递给您的请求


有关更多信息,请参阅。

是否只是因为您对start_请求生成的数据所做的任何操作都会合并记录,发现两个列表中都有152个通道?@Sumurai8感谢您的回复。很可能是这样。所以我必须分别废弃这两个url才能获得所有500条记录?但我有一个很大的URL列表,每个国家都有。你能指导我怎么做吗。