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)
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
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
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年 UP主: 亡是公 发布于 2015-05-24 20:22:26 / 点击数: 2602 / 评论数: 96" #情况2 没有UP主,就一个更新时间,这种数据常见于番剧: title="标题:【四月】幻界战线 更新至:第8集 更新于: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(' ') #获取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(' ') if now != -1: #接着处理情况1 #获取title row.set_title(data[1][:now].strip()) data[1] = data[1][now + 1:] #获取UP主 now = data[1].find(' ') 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))