首页 > 解决方案 > 使用 scrapy 进行网页抓取:空结果

问题描述

我正在学习如何使用 scrappy,我想从这个网站提取一些 youtube 视频链接。我编写了这个脚本来将网站中的链接提取到 json 文件中。

import scrapy
class getVideos(scrapy.Spider):
    name = 'wbScraper'
    start_urls = ['https://research.google.com/audioset///eval/baby_cry_infant_cry.html']

    def parse(self, response):
        for url in response.xpath("//div[@class='thumbnail_container']"): 
            yield {
                    'video_url': url.xpath(".//div[@class='u']").extract_first()

我只是得到一个空的回复(如下图所示)。我在另一个网站上试过,效果很好,这是第二个结果。 结果

你能帮我解决这个问题吗?xpath 似乎是正确的......

标签: pythonweb-scrapingscrapy

解决方案


视频不在原始请求的 html 中。相反,在加载视频的第一页之后发出第二个请求。

好消息是视频的 URL 很容易找到,而且结果格式很简单。该文件包含 YouTube 视频 ID 和视频标签。

https://storage.googleapis.com/audioset_website_data/youtube_corpus/v1/eval/baby_cry_infant_cry/1.js

这是来自该 URL 的文件的示例。

["2TV2DW0bzBg", 0.0, 8.0, [["Baby cry, infant cry", "baby_cry_infant_cry"]]], 
["2eWobSpugTw", 17.0, 27.0, [["Baby cry, infant cry", "baby_cry_infant_cry"]]], 
["2fKgYlCx_As", 26.0, 36.0, [["Crying, sobbing", "crying_sobbing"], ["Speech", "speech"], ["Baby cry, infant cry", "baby_cry_infant_cry"]]], 
["3KwulXmBX-8", 30.0, 40.0, [["Baby cry, infant cry", "baby_cry_infant_cry"]]], 
["4KxLSx-EhHI", 0.0, 9.0, [["Speech", "speech"], ["Baby cry, infant cry", "baby_cry_infant_cry"]]], 

推荐阅读