from main_def import *
importrequests,reimportdatetime,timefrom tkinter importEND
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36"}#单个帖子爬虫
deftz_cj(url,time_xz):#########-----------分割线--------------#############################
#########------------开始帖子邮箱采集-------------####################
#选择采集时间控制变量,1 为当天,7 为前七天,10 为不限制时间
#time_xz = 7
#获取当前时间
time1 = datetime.datetime.now().strftime('%Y-%m-%d')#邮箱存储列表
yx_list =[]#循环控制变量
pn = 1
whileTrue:
t_url= url + "?pn=" +str(pn)
t_re_html= requests.get(t_url, headers=headers).text#获取页数
red = re.findall('(.*?)', t_re_html)[0]#正则匹配提取每一个楼层
t_nr_1 = re.findall('
', t_re_html, re.S)
t_nr_2= re.findall('
t_nr= t_nr_1 +t_nr_2#循环遍历页面所有楼层
for re_lc int_nr:#这里做一个错误跳转,楼层没有邮箱则跳过
try:#提取楼层发布时间
times = re.search(r"(\d{4}-\d{1,2}-\d{1,2})", re_lc)
tims=(times.group(0))#提取楼层邮箱
pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,5}'items=re.findall(pattern, re_lc)[0]#判断采集当天
if time_xz == 1:#只爬取当天邮箱
if time1 ==tims:
yx_list.append(items)#判断采集前七天
elif time_xz == 7:
time7= datetime.datetime.today().date() - datetime.timedelta(days=8)if str(tims) >str(time7):
yx_list.append(items)#判断采集不限制时间
elif time_xz == 10:
yx_list.append(items)except:continue
#加页数
pn = pn + 1
#判断翻页完成跳出循环
if pn - 1 ==int(red):breaktime.sleep(0.5)return yx_list #返回采集到的邮箱
#文件写入函数
def text_save(filename,data,ts,text2): #filename为写入文件的路径,data为要写入数据列表.
datas = list(set(data)) #去除重复邮箱
times = datetime.datetime.now().strftime('%Y-%m-%d-%H')
file= open(times + "-" + filename + "吧邮箱采集文件.txt", 'a')for i inrange(len(datas)):
s= str(datas[i]).replace('[', '').replace(']', '') #去除[],这两行按数据不同,可以选择
s = s.replace("'", '').replace(',', '') + '\n' #去除单引号,逗号,每行末尾追加换行符
file.write(s)
file.close()
text2.insert(END,"第%d个帖邮箱采集成功保存文件!"%ts + '\n')
wjm= times + "-" + filename + "吧邮箱采集文件.txt"
return wjm #把文件名返回
#页面入口函数
def tieba_caiji(kw,time_xz,text2,pn,yx,bcwj): #kw传贴吧名,time_xz采集控制当天 text2传一个句柄 ,yx传运行状态 pn 传贴吧翻页
whileTrue:for ye in range(int(pn)): #这个循环是循环贴吧翻页
pn = ye * 50url= "https://tieba.baidu.com/f?kw=%s&ie=utf-8&pn=%d" %(kw, pn)#爬贴吧第一页的所有帖子
html = requests.get(url, headers=headers).text
re_html= re.findall('
ts= 1 #统计帖数
for i inre_html:
href= re.findall('href="(.*?)"', i, re.S)[0]
t_url= "https://tieba.baidu.com" +href
yx_list=tz_cj(t_url, time_xz)
wjm=text_save(kw, yx_list, ts, text2)
time.sleep(3)
ts= ts + 1text2.insert(END,"%s吧第%d页采集完成!" % (kw,ye+1) + '\n')
text2.insert(END,"%s吧采集完成!" % (kw) + '\n')#保存入今日文件
if bcwj == 2:
wenjian_xr(wjm)#如果为 2 则等待1小时 运行
if yx == 2:
time.sleep(3600)#翻页完成,退出软件
else:break