Web scraping 刮https://socialblade.com/
我对Scrapy是个新手,我正试图通过Scrapy网站获取一个国家浏览量和订阅量最多的YouTube的频道id 我这样做的方式是点击主列表页面上的YouTube链接(例如)。然后打开一个新页面,新打开页面的最后一部分包含频道id(例如) 这是我的密码: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):
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列表,每个国家都有。你能指导我怎么做吗。