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 parse(self, src): max = 0 #max这个字段用来查询更多的投稿 now = 0 rows = []#front_urlData while True: cursor = 0 #保存字符串出现的位置 row = ACcommentsInfoPO() #保存一篇投稿抓取的内容 #判断是否包含投稿链接 cursor = src.find('<a href="') if cursor == -1: break #抓取投稿类型 src = src[cursor+9:] if src[0:5] == "/v/ac": row.set_type("视频") elif src[0:5] == "/a/ac": row.set_type("文章") else: continue #判断是否为包含URL地址 cursor = src.find('"') if cursor == -1: continue #查询更多的投稿 try: now = int(src[src.find("/ac")+3:cursor]) if max < now: max = now except Exception: max = 0 #抓取投稿URL row.set_id(src[src.find("/ac")+3:cursor]) row.set_url(ACFUN + src[:cursor]) src = src[cursor+2:] #进入一些异常判断和投稿标题分析 if not src[:23] == 'target="_blank" title="': continue src = src[27:] cursor = src.find("
") if cursor == -1 \ or cursor > 150: continue #抓取投稿标题 row.set_title(src[:cursor]) src = src[cursor+10:] #判断是否为包含UP信息 cursor = src.find("
") if cursor == -1: continue #抓取UP信息 row.set_up(src[:cursor]) src = src[cursor+9:] #判断是否为包含投稿时间 cursor = src.find(" / ") if cursor == -1: continue #抓取投稿时间 row.set_post_time(src[:cursor]) src = src[cursor+12:] #将row保存到rows中 rows.append(row) self.create_more(rows, max) self.ACCommentsInfo.insert(rows) #parseTimeB = time.time() #性能统计 #print("parse用时:" + str(parseTimeB - parseTimeA)) return rows
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))
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))
def get_refresh_data(self, buf): rows = [] for item in buf: row = ACcommentsInfoPO() row.set_type("秘密") row.set_id(str(item)) row.set_url(ACFUN_URL + str(item)) row.set_title("秘密") row.set_up("秘密") row.set_post_time("1992-06-17 01:02:03") rows.append(row) self.ACCommentsInfo.insert(rows) return rows
def parse(self, front_urlData, src): max = 0; #max这个字段用来查询更多的投稿 now = 0; rows = front_urlData; while True: cursor = 0; #保存字符串出现的位置 row = ACcommentsInfoPO(); #保存一篇投稿抓取的内容 #判断是否包含投稿链接 cursor = src.find('<a href="'); if cursor == -1: break; #抓取投稿类型 src = src[cursor+9:]; if src[0:5] == "/v/ac": row.set_type("视频"); elif src[0:5] == "/a/ac": row.set_type("文章"); else: continue; #判断是否为包含URL地址 cursor = src.find('"'); if cursor == -1: continue; #查询更多的投稿 now = int(src[src.find("/ac")+3:cursor]); if max < now: max = now; #抓取投稿URL row.set_id(src[src.find("/ac")+3:cursor]); row.set_url(ACFUN + src[:cursor]); src = src[cursor+2:]; #进入一些异常判断和投稿标题分析 if not src[:23] == 'target="_blank" title="': continue; src = src[27:]; cursor = src.find(" "); if cursor == -1 \ or cursor > 150: continue; #抓取投稿标题 row.set_title(src[:cursor]); src = src[cursor+10:]; #判断是否为包含UP信息 cursor = src.find(" "); if cursor == -1: continue; #抓取UP信息 row.set_up(src[:cursor]); src = src[cursor+9:]; #判断是否为包含投稿时间 cursor = src.find(" / "); if cursor == -1: continue; #抓取投稿时间 row.set_post_time(src[:cursor]); src = src[cursor+12:]; #将row保存到rows中 rows.append(row); self.create_more(rows, max); self.ACCommentsInfo.insert(rows); #parseTimeB = time.time(); #性能统计 #print("parse用时:" + str(parseTimeB - parseTimeA)); return rows;
def create_more(self, rows, id): for i in range(1, 50): row = ACcommentsInfoPO(); now_id = str(id - i); row.set_id(now_id); row.set_url(ACFUN_URL + now_id); row.set_type("秘密"); row.set_title("秘密"); row.set_up("秘密"); row.set_post_time("1992-06-17 01:02:03"); rows.append(row);
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 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