Esempio n. 1
0
 def create_more(self, rows, ac_id):
     for i in range(1, 750):
         row = ACcommentsInfoPO()
         now_id = str(ac_id - i)
         row.set_id(now_id)
         row.set_url(ACFUN_URL + now_id)
         row.set_type("类型未知")
         row.set_title("标题不详")
         row.set_up("UP主不详")
         row.set_post_time("1992-06-17 01:02:03")
         rows.append(row)
Esempio n. 2
0
 def create_more(self, rows, ac_id, acinfolist):
     for i in range(1, 750):
         now_id = str(ac_id - i)
         if now_id not in acinfolist:
             row = ACcommentsInfoPO()
             row.set_id(now_id)
             row.set_url(ACFUN_URL + str(abs(int(now_id))))
             row.set_type("类型未知")
             row.set_title("标题不详")
             row.set_check_time(str(datetime.datetime.now()))
             rows.append(row)
         else:
             continue
Esempio n. 3
0
    def parse(self, src, acinfolist):
        max_id = 0  #max_id这个字段用来查询更多的投稿
        now = 0
        rows = []  #front_urlData
        for data in src:
            try:
                row = ACcommentsInfoPO()  #保存一篇投稿抓取的内容
                #获取投稿类型
                if data[0][0:5] == '/v/ac':
                    row.set_id(data[0][5:])
                    row.set_type('视频')
                elif data[0][0:5] == '/a/ac':
                    row.set_id(data[0][5:])
                    row.set_type('文章')
                elif data[0][0:5] == '/v/ab':
                    #番剧的id和其他不一样,加负号以示区别
                    row.set_id('-' + data[0][5:])
                    row.set_type('番剧')
                else:
                    continue

                #获取acid和url
                row.set_url(ACFUN + data[0])

                #max_id这个字段用来查询更多的投稿,比如我从首页获取的最大投稿是ac190000,那么一会我会多抓去ac188900到ac190000的评论信息
                if max_id < int(data[0][5:]):
                    max_id = int(data[0][5:])

                #先过滤掉前面几个字
                data[1] = data[1][7:]

                row.set_title(data[1])
                row.set_check_time(str(datetime.datetime.now()))

            except Exception:
                continue
            if str(row.get_id()) not in acinfolist:
                rows.append(row)
                acinfolist.append(str(row.get_id()))

        #开始随机抓取评论
        if len(rows) > 0:
            self.create_more(rows, max_id, acinfolist)
            #投稿信息单独放一张表
            self.ac_comments.db_proc.ACCommentsInfo.insert(rows)

        return acinfolist
Esempio n. 4
0
    def parse(self, src):
        max_id = 0  #max_id这个字段用来查询更多的投稿
        now = 0
        rows = []  #front_urlData
        for data in src:
            try:
                row = ACcommentsInfoPO()  #保存一篇投稿抓取的内容

                #获取投稿类型
                if data[0][0:5] == '/v/ac':
                    row.set_id(data[0][5:])
                    row.set_type('视频')
                elif data[0][0:5] == '/a/ac':
                    row.set_id(data[0][5:])
                    row.set_type('文章')
                elif data[0][0:5] == '/v/ab':
                    #番剧的id和其他不一样,加负号以示区别
                    row.set_id('-' + data[0][5:])
                    row.set_type('番剧')
                else:
                    continue

                #获取acid和url
                row.set_url(ACFUN + data[0])

                #max_id这个字段用来查询更多的投稿,比如我从首页获取的最大投稿是ac190000,那么一会我会多抓去ac188900到ac190000的评论信息
                if max_id < int(data[0][5:]):
                    max_id = int(data[0][5:])

                #到了解析title的时候了,A站的title写的很不规范,以下是我们需要分析的几种情况
                #情况1 什么都有,开工的时候要注意标题后面的两种冒号: title="标题: 抗战烽火孕育新中国国歌 《义勇军进行曲》唱响世界80年&#13;UP主: 亡是公&#13;发布于 2015-05-24 20:22:26 / 点击数: 2602 / 评论数: 96"
                #情况2 没有UP主,就一个更新时间,这种数据常见于番剧: title="标题:【四月】幻界战线 &#13;更新至:第8集 &#13;更新于:2015年05月24日"
                #情况3 这下更牛B,连更新时间都不需要了,一般是推荐 : title="全明星热唱happy"
                #情况4 还有这种有标题但没有UP主的                  : title="标题: 我爱你 中国(A站爱国兔子合集)"

                #先过滤掉前面几个字
                data[1] = data[1][7:]

                #先排除情况3
                now = data[1].find('标题')
                if now == -1:
                    row.set_title(data[1][:len(data[1]) - 1].strip())
                    #然后开始疯狂捏造数据
                    row.set_up("UP主不详")
                    row.set_post_time("1992-06-17 01:02:03")
                else:
                    data[1] = data[1][3:]
                    #然后排除情况2
                    now = data[1].find('更新于')
                    if now != -1:
                        now = data[1].find('&#13;')
                        #获取title
                        row.set_title(data[1][:now].strip())
                        #然后也开始疯狂捏造数据
                        row.set_up("UP主不详")
                        row.set_post_time("1992-06-17 01:02:03")
                    else:
                        now = data[1].find('&#13;')
                        if now != -1:
                            #接着处理情况1
                            #获取title
                            row.set_title(data[1][:now].strip())
                            data[1] = data[1][now + 1:]

                            #获取UP主
                            now = data[1].find('&#13;')
                            row.set_up(data[1][9:now])
                            data[1] = data[1][now + 1:]

                            #获取投稿时间
                            now = data[1].find(' / ')
                            row.set_post_time(data[1][8:now])
                        else:
                            #最后是情况4
                            row.set_title(data[1][:len(data[1]) - 1].strip())
                            #然后开始疯狂捏造数据
                            row.set_up("UP主不详")
                            row.set_post_time("1992-06-17 01:02:03")

            except Exception:
                continue

            rows.append(row)

        #开始随机抓取评论
        self.create_more(rows, max_id)
        #投稿信息单独放一张表
        self.ac_comments.db_proc.ACCommentsInfo.insert(rows)

        return list(set(rows))