예제 #1
0
파일: lyric.py 프로젝트: xieyanfu/spider163
 def view_lyrics(self, count):
     song = []
     for i in range(int(count / 10)):
         ms = self.session.query(pysql.Music163).filter(
             pysql.Music163.has_lyric == "N").limit(10)
         for m in ms:
             print("正在抓取歌词 ID {} 歌曲 {}".format(
                 m.song_id, pylog.Blue(tools.encode(m.song_name))))
             self.view_lyric(m.song_id)
             song.append({
                 "name": m.song_name,
                 "author": m.author,
                 "comment": m.comment
             })
     ms = self.session.query(pysql.Music163).filter(
         pysql.Music163.has_lyric == "N").limit(count % 10)
     for m in ms:
         print("正在抓取歌词 ID {} 歌曲 {}".format(
             m.song_id, pylog.Blue(tools.encode(m.song_name))))
         self.view_lyric(m.song_id)
         song.append({
             "name": m.song_name,
             "author": m.author,
             "comment": m.comment
         })
     return song
예제 #2
0
 def auto_view(self, count=1):
     try:
         if count < 10:
             msc = self.session.query(pysql.Music163).filter(
                 pysql.Music163.over == "N").limit(count)
             for m in msc:
                 print("抓取热评 ID {} 歌曲 {}".format(
                     m.song_id, pylog.Blue(m.song_name.encode('utf-8'))))
                 self.views_capture(m.song_id, 1, 1)
         else:
             for i in range(count / 10):
                 msc = self.session.query(pysql.Music163).filter(
                     pysql.Music163.over == "N").limit(10)
                 for m in msc:
                     print("抓取热评 ID {} 歌曲 {}".format(
                         m.song_id,
                         pylog.Blue(m.song_name.encode('utf-8'))))
                     self.views_capture(m.song_id, 1, 1)
             msc = self.session.query(pysql.Music163).filter(
                 pysql.Music163.over == "N").limit(count % 10)
             for m in msc:
                 print("抓取热评 ID {} 歌曲 {}".format(
                     m.song_id, pylog.Blue(m.song_name.encode('utf-8'))))
                 self.views_capture(m.song_id, 1, 1)
     except:
         self.session.rollback()
         pylog.log.error("自动抓取热评出现异常,歌曲ID:" + str(m.song_id))
         raise
예제 #3
0
    def auto_view(self, count=1):
        song = []
        if count < 10:
            msc = self.session.query(
                pysql.Music163).filter(pysql.Music163.done == "N").order_by(
                    pysql.Music163.id).limit(count)
            for m in msc:
                try:
                    print("抓取热评 ID {} 歌曲 {}".format(
                        m.song_id, pylog.Blue(tools.encode(m.song_name))))
                    self.views_capture(m.song_id, 1, 1)
                    song.append({
                        "name": m.song_name,
                        "author": m.author,
                        "song_id": m.song_id
                    })
                except Exception as e:
                    self.session.rollback()
                    pylog.log.error("自动抓取热评出现异常:{} 歌曲ID:{}".format(
                        e, m.song_id))
        else:
            for i in range(int(count / 10)):
                msc = self.session.query(pysql.Music163).filter(
                    pysql.Music163.done == "N").limit(10)
                for m in msc:
                    try:
                        print("抓取热评 ID {} 歌曲 {}".format(
                            m.song_id, pylog.Blue(tools.encode(m.song_name))))
                        self.views_capture(m.song_id, 1, 1)
                        song.append({
                            "name": m.song_name,
                            "author": m.author,
                            "song_id": m.song_id
                        })
                    except Exception as e:
                        self.session.rollback()
                        pylog.log.error("自动抓取热评出现异常:{} 歌曲ID:{}".format(
                            e, m.song_id))
            msc = self.session.query(
                pysql.Music163).filter(pysql.Music163.done == "N").order_by(
                    pysql.Music163.id).limit(count % 10)
            for m in msc:
                try:
                    print("抓取热评 ID {} 歌曲 {}".format(
                        m.song_id, pylog.Blue(tools.encode(m.song_name))))
                    self.views_capture(m.song_id, 1, 1)
                    song.append({
                        "name": m.song_name,
                        "author": m.author,
                        "song_id": m.song_id
                    })
                except Exception as e:
                    self.session.rollback()
                    pylog.log.error("自动抓取热评出现异常:{} 歌曲ID:{}".format(
                        e, m.song_id))

        return song
예제 #4
0
 def view_lyrics(self, count):
     for i in range(count / 10):
         ms = self.session.query(pysql.Music163).filter(
             pysql.Music163.has_lyric == "N").limit(10)
         for m in ms:
             print("正在抓取歌词 ID {} 歌曲 {}".format(
                 m.song_id, pylog.Blue(m.song_name.encode("utf-8"))))
             self.view_lyric(m.song_id)
     ms = self.session.query(pysql.Music163).filter(
         pysql.Music163.has_lyric == "N").limit(count % 10)
     for m in ms:
         print("正在抓取歌词 ID {} 歌曲 {}".format(
             m.song_id, pylog.Blue(m.song_name.encode("utf-8"))))
         self.view_lyric(m.song_id)
예제 #5
0
    def auto_view(self, count=1):
        song = []
        if self.music_type == self.Common:
            msc = self.session.query(
                pysql.Music163).filter(pysql.Music163.done == "N").order_by(
                    pysql.Music163.id).limit(count)
            for m in msc:
                try:
                    print("抓取热评 ID {} 歌曲 {}".format(
                        m.song_id, pylog.Blue(tools.encode(m.song_name))))
                    self.views_capture(m.song_id, 1, 1)
                    song.append({
                        "name": m.song_name,
                        "author": m.author,
                        "song_id": m.song_id
                    })
                except Exception as e:
                    pylog.log.error("自动抓取热评出现异常:{} 歌曲ID:{}".format(
                        e, m.song_id))
        elif self.music_type == self.Official:
            msc = self.session.query(pysql.Toplist163).filter(
                pysql.Toplist163.done == "N").order_by(
                    pysql.Toplist163.id).limit(count)
            for m in msc:
                try:
                    print("抓取官方榜单歌曲热评 ID {} 歌曲 {}".format(
                        m.song_id, pylog.Blue(tools.encode(m.song_name))))
                    self.views_capture(m.song_id, 1, 2)  # 意味着每一页的评论都抓取
                    song.append({
                        "name": m.song_name,
                        "author": m.author,
                        "song_id": m.song_id
                    })
                except Exception as e:
                    pylog.log.error("自动抓取官方榜单热评出现异常:{} 歌曲ID:{}".format(
                        e, m.song_id))

        return song
예제 #6
0
def searchSong(key):
    url = default.search_api
    data = {'s': key, 'offset': 0, 'limit': 20, 'type': "1"}
    req = requests.post(url, headers=default.header, data=data, timeout=10)
    songs = req.json()["result"]['songs']
    song_table = AsciiTable([["ID", "歌曲", "专辑", "演唱"]])
    for item in songs:
        id = item['id']
        name = (item['name']).encode("utf-8")
        album = (item['album']['name']).encode("utf-8")
        artist = []
        for a in item['artists']:
            artist.append(a['name'].encode("utf-8"))
        song_table.table_data.append([str(id), name, album, ",".join(artist)])
    print(pylog.Blue("与 \"{}\" 有关的歌曲".format(key)))
    print(song_table.table)
예제 #7
0
def searchSinger(key):
    url = uapi.search_api
    data = {'s': key, 'offset': 0, 'limit': 10, 'type': "100"}
    req = requests.post(url, headers=uapi.header, data=data, timeout=10)
    if req.json()["result"]['artistCount'] == 0:
        pylog.log.warn("关键词 {} 没有可搜索艺术家".format(key))
        return
    artists = req.json()["result"]['artists']
    song_table = AsciiTable([["ID", "姓名", "专辑数量", "MV数量"]])
    for item in artists:
        id = str(item['id'])
        name = item['name'].encode("utf-8")
        acount = str(item['albumSize'])
        mcount = str(item['mvSize'])
        song_table.table_data.append([id, name, acount, mcount])
    print(pylog.Blue("与 \"{}\" 有关的歌手".format(key)))
    print(song_table.table)
예제 #8
0
def searchAlbum(key):
    url = default.search_api
    data = {'s': key, 'offset': 0, 'limit': 20, 'type': "10"}
    req = requests.post(url, headers=default.header, data=data, timeout=10)
    albums = req.json()["result"]['albums']
    song_table = AsciiTable([["ID", "专辑", "演唱","发行方"]])
    for item in albums:
        id = item['id']
        name = item['name'].encode("utf-8")
        company = ""
        if item['company'] !=  None:
            company = item['company'].encode("utf-8")
        artist = []
        for a in item['artists']:
            artist.append(a['name'].encode("utf-8"))
        song_table.table_data.append([str(id), name, ",".join(artist), company])
    print(pylog.Blue("与 \"{}\" 有关的专辑".format(key)))
    print(song_table.table)
예제 #9
0
def searchPlaylist(key):
    url = uapi.search_api
    data = {'s': key, 'offset': 0, 'limit': 5, 'type': "1000"}
    req = requests.post(url, headers=uapi.header, data=data, timeout=10)
    if req.json()["result"]['playlistCount'] == 0:
        pylog.log.warn("关键词 {} 没有可搜索歌单".format(key))
        return
    playlists = req.json()["result"]['playlists']
    song_table = AsciiTable([["ID", "歌单", "维护者", "播放数量", "收藏数量"]])
    for item in playlists:
        id = str(item['id'])
        name = item['name'].encode("utf-8")
        creator = item['creator']['nickname'].encode("utf-8")
        pcount = str(item['playCount'])
        bcount = str(item['bookCount'])
        song_table.table_data.append([id, name, creator, pcount, bcount])
    print(pylog.Blue("与 \"{}\" 有关的歌单".format(key)))
    print(song_table.table)
예제 #10
0
def searchSong(key):
    url = uapi.search_api
    data = {'s': key, 'offset': 0, 'limit': 20, 'type': "1"}
    req = requests.post(url, headers=uapi.header, data=data, timeout=10)
    if req.json()["result"]['songCount'] == 0:
        pylog.log.warn("关键词 {} 没有可搜索歌曲".format(key))
        return
    songs = req.json()["result"]['songs']
    song_table = AsciiTable([["ID", "歌曲", "专辑", "演唱"]])
    for item in songs:
        id = item['id']
        name = tools.encode(item['name'])
        album = tools.encode(item['album']['name'])
        artist = []
        for a in item['artists']:
            artist.append(tools.encode(a['name']))
        song_table.table_data.append([str(id), name, album, ",".join(artist)])
    print(pylog.Blue("与 \"{}\" 有关的歌曲".format(key)))
    print(song_table.table)
예제 #11
0
def searchAlbum(key):
    url = uapi.search_api
    data = {'s': key, 'offset': 0, 'limit': 20, 'type': "10"}
    req = requests.post(url, headers=uapi.header, data=data, timeout=10)
    if req.json()["result"]['albumCount'] == 0:
        pylog.log.warn("关键词 {} 没有可搜索专辑".format(key))
        return
    albums = req.json()["result"]['albums']
    song_table = AsciiTable([["ID", "专辑", "演唱", "发行方"]])
    for item in albums:
        id = item['id']
        name = tools.encode(item['name'])
        company = ""
        if item['company'] != None:
            company = tools.encode(item['company'])
        artist = []
        for a in item['artists']:
            artist.append(tools.encode(a['name']))
        song_table.table_data.append(
            [str(id), name, ",".join(artist), company])
    print(pylog.Blue("与 \"{}\" 有关的专辑".format(key)))
    print(song_table.table)