Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 抓取音乐网站以获取歌词_Python_Python 2.7_Web Crawler - Fatal编程技术网

Python 抓取音乐网站以获取歌词

Python 抓取音乐网站以获取歌词,python,python-2.7,web-crawler,Python,Python 2.7,Web Crawler,我想爬网歌词网站:获得歌曲的名称,艺术家,流派和歌词。 然后我编写以下代码并将其另存为mp3_spider.py import scrapy class MP3Spider(scrapy.Spider): name = "mp3" start_urls = ['http://mp3.zing.vn/bai-hat/Vi-Anh-La-Soai-Ca-Dam-Vinh-Hung/ZW78EUE8.html'] def parse(self, response): yie

我想爬网歌词网站:获得歌曲的名称,艺术家,流派和歌词。 然后我编写以下代码并将其另存为mp3_spider.py

import scrapy

class MP3Spider(scrapy.Spider):
    name = "mp3"
    start_urls = ['http://mp3.zing.vn/bai-hat/Vi-Anh-La-Soai-Ca-Dam-Vinh-Hung/ZW78EUE8.html']

def parse(self, response):
    yield
    {
        'song': response.css('.txt-primary h1::text').extract()[0],
        'artist': response.css('.artist-track-log a::text').extract()[0],
        'genre': response.css('.genre-track-log::text').extract()[0],
        'lyrics': response.css('.fn-content::text').extract()[0]
    }
我在命令行中运行了它:

scrapy runspider mp3_spider.py -o mp3.json
但它什么也不返回。
有人能告诉我怎么做吗?非常感谢您的帮助。

您的类&
MP3Spider
,实际上没有做任何事情,因为
parse
是一个独立的函数。如果您缩进
parse
以匹配这样的缩进,它至少会运行

class MP3Spider(scrapy.Spider):
    name = "mp3"
    start_urls = ['http://mp3.zing.vn/bai-hat/Vi-Anh-La-Soai-Ca-Dam-Vinh-Hung/ZW78EUE8.html']

    def parse(self, response):
        yield
        {
            'song': response.css('.txt-primary h1::text').extract()[0],
            'artist': response.css('.artist-track-log a::text').extract()[0],
            'genre': response.css('.genre-track-log::text').extract()[0],
            'lyrics': response.css('.fn-content::text').extract()[0]
        }

我冒昧地重新创建了这个场景,除了前面的海报答案。。。。缩进级别对于Python如何解释代码非常重要:做什么,下一步或之前不做什么。此外:

 def parse(self, response):
        yield
        {
            'song': response.css('.txt-primary h1::text').extract()[0],#here
            'artist': response.css('.artist-track-log a::text').extract()[0]#here,
            'genre': response.css('.genre-track-log::text').extract()[0],#here
            'lyrics': response.css('.fn-content::text').extract()[0]#here
        }
我可以问一下你是如何得出你提取的值的吗?我假设您可能不会使用“scrapy shell”your.com…我假设,因为插入您拥有的内容,它会告诉您范围..=[0]..不存在,至少对于所选的路径是这样的

我擅自修改了你的密码但是因为我不懂越南语 ,你可能不得不摆弄一些正则表达式

小贴士:

  • 虽然不一定很重要,但当你在抓取包含段落的内容时,最好使用逐项选择,这会使对大量文本的分组更容易,并且我的经验中所需的正则表达式更少

  • 习惯使用Scrapy shell函数并在其中进行所有路径选择。如果您使用它并养成第一件事类型查看(响应)的习惯,这将为您节省大量时间。动态加载页面或阻止Scrapy默认代理标头的网页将不像普通页面那样容易(仍然很容易,总有办法解决这个问题)


  • 我怀疑
    parse
    方法应该在类中定义。你知道吗?你好,我非常感谢你在纠正我的文章时所做的努力,信不信由你,很久以前,句子结构和正确的思想结构实际上是我的强项…快进6年,我什么都没有,只是粗鄙阿迪泽,社交媒体,口语化使用任何书面形式来表达我自己是我向他人表达的唯一形式。编程现在已经成为我真正的表达形式,代价是听起来不识字……英语语法复习课程井然有序。谢谢你的帮助。我试着运行你的代码,但似乎不起作用。我不知道我错过了什么。顺便问一下,你能告诉我如何获取xpath和css吗?非常感谢。嘿!嗯…1.你在ass下运行这个项目中的python版本是什么?2.请,当你的代码执行不起作用时,请提供跟踪或错误日志输出…完整详细的响应对于故障排除至关重要,你会这样做的很高兴能尽可能地习惯这样做!!苏…你犯了什么错误?@TôVạnHưng您是否放弃了这个scrapy项目,或者您在运行它时仍然有问题?请记住升级您的scrapy…我完全错过了您关于如何获取xpath的问题。如果您仍然希望我给您提供我的建议,请创建一个问题,并在其中提及我或/并将其链接到此处,已经编写好了,只是担心得到fla谢谢你在这里回答问题里面的问题。
    _author_ = 'Tô Vạn Hưng'
    __credits__ = 'scriptso' #just helping a brother from the far east
    import scrapy
    
    class MP3Spider(scrapy.Spider):
        name = "mp3"
        start_urls = ['http://mp3.zing.vn/bai-hat/Vi-Anh-La-Soai-Ca-Dam-Vinh-Hung/ZW78EUE8.html']
    
        def parse(self, response):
            yield
            {
                'song': response.css('s.fn-name::text').extract(),
                'artist': response.css('.inline h2::text').extract_first(),
                'genre': response.xpath("//div[@class='inline']/h2/a[contains(font.font,'')]//text()").re('[^\n].*\w')[2:],
                'lyrics': response.css('.fn-wlyrics.fn-content::text').re('[^\n].*\w+'),
            }