pua肆虐?运用python进行图片文字识别得到“所谓pua导师”热卖作品列表,然后用分布式爬虫全网采集,起底各pua!
回 复 潘多拉 送 你 一 个 特 别 推 送
用数据揭穿pua的真面目,python 奥利给!
用python可以做好多好玩的事情,比如说我之前做的,新型冠状病毒疫情之下,采集央视网新联频道,生成词云,看民众最当下最关注什么。用python的requests模块采集央视网新联频道,制做新型冠状病毒战役季热点词云。
当然这还不是最好玩的,我之前有发表过文章情感操控术——如何不被渣男控制。为了切实表达对pua不了解,担心上当受骗的群体的关切,我特意用python写了一个脚本,采集某站点兜售的所谓各种导师所有课程的截图。然后用baidu-aip工具包解析出导师的所有作品,然后再经过一些骚操作,处理成“从作品到人到惯用套路的”故事型“pdf文档(开始想直接放在服务器上,部署成小姐姐只要输入某人微信号或微博号或者十张朋友圈常用照,就给出他是pua概率的应用,后来备案太麻烦,因此作罢)。
先看看部分效果。
上代码。
#!/usr/bin/python# -*- coding: UTF-8 -*-from requests_html import HTMLSessionfrom pymongo import MongoClientimport refrom urllib.parse import urlparseimport timefrom baidu.client import BaiduClientfrom baidu.api import BaseBaiduAPIfrom aip import AipOcrimport os,logging LOG_FILENAME='test.log'logging.basicConfig(filename=LOG_FILENAME,level=logging.INFO)client=MongoClient('127.0.0.1',27017)#连服务器db=client['pua']#连数据库collection=db['pua_recognize_detail']#连数据表session=HTMLSession()#感觉比requests好用# print('开始执行')result=collection.count_documents({})if not result: r=session.get('请求地址')#想动手亲测 可关注公众号”cnpuaer“,回复”pua测试地址获取“ link_list=r.html.links new_list=[] for link in link_list: if 'product' in str(link.strip()): link_real=str(link.strip()).replace('..','请求地址的根域名') # print('\n') # print(link_real) # new_list.append(link_real) collection.insert_one({'url':link_real}) result=collection.find()else: result=collection.find()HAS_FINISHED=True#这里改成False可以将数据入库,同时把图片下载到当前pua目录下 做完此步,此处改成True不再执行if not HAS_FINISHED: insert_list=[] item_number=0 for url in result: item_number+=1 rs=url['url'] result=session.get(rs) content=result.html.xpath('//div[@class="viewtxt"]') for c in content: content_html=c.html # pattern=re.compile('\<img src\=\"(.*)\"[^>]?\/\>|\<img src\=\"(.*)\"[^>]?\>.*?\<\/img\>',re.DOTALL) # pattern=re.compile('<img src=\s*\\*"(.+?)\\*"\s*/>') pattern = ".[^\=\"]+\.(?i:jpg|gif|png|bmp)" images = re.findall(pattern, content_html) img_dict = {} # 用于写库 if images: img_list=[]#用于检测重复 i=0 for img in images: i+=1 img_url=img.lstrip('"') if img_url not in img_list: istr = str(i) img_list.append(img_url) if 'http' not in img_url: img_url = '请求地址的根域名'+img_url filename=urlparse(img_url)[2] if urlparse(img_url)[2] else '' print(filename) if filename: filename_list=filename.split("/") cur_filename=filename_list.pop() Picture_request = session.get(img_url) if Picture_request.status_code == 200: with open("pua/"+cur_filename, 'wb') as f: f.write(Picture_request.content) img_dict[istr]=img_url content_text=c.text content_text=content_text.replace('\n','|',1) content_text=content_text.replace('\n','') # print('当前在处理第{}条数据,即将入库的数据是{}'.format(str(item_number),{'url':rs,'content_text':content_text,'content_pics':img_dict})) insert_list.append({'url':rs,'content_text':content_text,'content_pics':img_dict}) try: collection.insert_one({'url':rs,'content_text':content_text,'content_pics':img_dict}) except Exception as e: print(e) print('执行结束') exit()#至此数据全部写库class ParseImage(object): @staticmethod def get_file_content(filePath):#读取文件内容,定义成staticmethod就可以当普通函数来用 # print(filePath) with open(filePath, 'rb') as fp: return fp.read() @staticmethod def write_on_txt(content, filePath, linefeed="1"):#写识别出的文本到文档 with open(filePath, "a",encoding='utf-8') as file:#不指定编码写入会乱码 a模式是往里追加 如果直接w会覆盖 try: file.write(content) except: print("写入错误") else: if linefeed != "1": file.write("\n")if __name__ == '__main__': ins=ParseImage() # print(ins.parse_zhihu()) # 获取开始时间 start = time.time()#记录脚本开始运行时间 """ 你的 APPID AK SK """ APP_ID = '百度开发者平台给你的APP_ID' API_KEY = '百度开发者平台给你的API_KEY' SECRET_KEY = '百度开发者平台给你的SECRET_KEY' # client = BaiduClient(APP_ID, API_KEY, SECRET_KEY) client = AipOcr(APP_ID, API_KEY, SECRET_KEY) # 图片路径 img_path = r"D:\guruyu\python\famou\test\pua" # 反斜杠要带r,正斜杠不用,仅做参考,根据你本地环境指定 # 文本路径 txt_path = r"D:\guruyu\python\famou\test\orc.txt"#同上 options = {} # 遍历所有文件(使用 os.walk 方法) for root, dirs, files in os.walk(img_path): for file in files: # 文件所在目录和文件名连接 file_dir = os.path.join(root, file) ins.write_on_txt("=============================", txt_path, "0") ins.write_on_txt("文件名:" + file_dir, txt_path, "0") # 只对png和jpg做处理 if file_dir[-4:] == ".png" or file_dir[-4:] == ".jpg": # 传入图片 image = ins.get_file_content(file_dir) """ 调用通用文字识别, 图片参数为本地图片 """ a = client.basicGeneral(image, options) # 查看返回的结果 # print(a['words_result']) if 'words_result' in a: for dic in a['words_result']: print(dic['words']) logging.info(dic['words']) ins.write_on_txt(dic['words'], txt_path, "0") end = time.time()#结束时间 print('Running time: %1.2f Seconds' % (end - start))#记录脚本运行时间
最终根据上面截图的作品或者导师做关键字,然后分布式爬虫去百度结果页、新浪微博等地方检索信息并最终汇兑,形成涵盖各所谓”导师“的作品及其惯用套路的内容丰富的pdf文档。知道对手底牌你才晓得怎么对他”一击毙命“,正所谓知已知彼百战不殆是也。欢迎关注公众号”cnpuaer“,回复关键字”防渣手册“下载。感谢阅读。(部分图片来自互联网,侵删)
CnPuaer∣一个专注效率脱单的公众号
长按,识别二维码,加关注