我爱编程

【python爬虫】Beyond歌词爬取、分析

2018-04-13  本文已影响0人  GaGLee

测试分析

scrawl shell http://www.lrcgc.com/lyric-263-314689.html
得到response 200,可以爬取

写爬虫

本次爬取的目标网站属于双向爬取

  1. items.py中,定义四个属性
    name = scrapy.Field()
    album = scrapy.Field()
    url = scrapy.Field()
    lrc = scrapy.Field()
  1. spider.py中,定义parse()、son_parse()两个方法
    2.1定义parse()方法
    提示:别忘了import items,并设置Source Root
    代码核心:谨记两个任务(返回items、next_url)、返回next_url时用if分情况yield
    def parse(self, response):
        items = BeyongLrcItem()
        items["name"] = response.xpath("//div[@class='thread_posts_list']/table/tbody/tr/td[1]/a/text()").extract()
        items["album"] = response.xpath("//div[@class='thread_posts_list']/table/tbody/tr/td[2]").extract()
        items["url"] = response.xpath("//div[@class='thread_posts_list']/table/tbody/tr/td[1]/a/@href").extract()
        now_page_num = response.xpath("//div[@class='pages']/strong/text()").extract()[0]
        # 即使只有一个数字,xpath.extract()返回的是一个list,不能对list用int,必须添加[0]将这个元素取出
        yield items
        print("成功提取到第", now_page_num, "主页中所有歌曲的名称、专辑和链接3个信息")
        for i in range(len(items["url"]) + 1):
            if i < len(items["url"]):
                print("正在进入第", i + 1, "首歌曲的歌词页面")
                next_page = "http://www.lrcgc.com/" + items["url"][i]
                yield scrapy.Request(next_page, callback=self.son_parse)
                print("成功,将发起下一次请求……")
            else:
                offset = int(now_page_num) + 1
                print("当前页面的歌曲信息已经全部提取完成,即将进入第", offset, "个页面")
                next_page = "http://www.lrcgc.com/songlist-263-" + str(offset) + ".html"
                yield scrapy.Request(next_page, callback=self.parse)
                print('-' * 100)

错点提示:

    def son_parse(self, response):
        items = BeyongLrcItem()
        items["lrc"] = response.xpath("//p[@id='J_lyric']/text()").extract()
        yield items

Done!

上一篇 下一篇

猜你喜欢

热点阅读