精英联盟总队|带大家写一波微信公众号的爬取!谁说微信爬不了的( 三 )


'''下载所有文章'''def __downloadArticles(self):print('[INFO]: 开始爬取目标公众号的所有文章内容...')if not os.path.exists(self.savedir):os.mkdir(self.savedir)fp = open('links_tmp.json', 'r', encoding='utf-8')article_infos = json.load(fp)for key, value in article_infos.items():print('[INFO]: 正在抓取文章 ——> %s' % key)pdfkit.from_url(value, os.path.join(self.savedir, key+'.pdf'), configuration=pdfkit.configuration(wkhtmltopdf=self.cfg.wkhtmltopdf_path))print('[INFO]: 已成功爬取目标公众号的所有文章内容...')注意 , 使用pdfkit前需要先安装wkhtmltox 。 如下图所示:
精英联盟总队|带大家写一波微信公众号的爬取!谁说微信爬不了的运行的效果大概是这样子的:
精英联盟总队|带大家写一波微信公众号的爬取!谁说微信爬不了的
精英联盟总队|带大家写一波微信公众号的爬取!谁说微信爬不了的全部源码根据自己的抓包结果修改cfg.py文件:
## cfg.py# 目标公众号标识biz = 'MzAwNTA5NTYxOA=='# 微信登录后的一些标识参数pass_ticket = ''appmsg_token = '1055_YAmuAw2QG7dM3aTwSVZVqgtRdct6ilAMTwlz7g~~'# 安装的wkhtmltopdf.exe文件路径wkhtmltopdf_path = r'D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'12345678## articlesSpider.pyimport osimport timeimport jsonimport pdfkitimport randomimport requestsimport warningswarnings.filterwarnings('ignore')'''微信公众号文章爬取类'''class articlesSpider(object):def __init__(self, cfg, **kwargs):self.cfg = cfgself.session = requests.Session()self.__initialize()'''外部调用'''def run(self):self.__getArticleLinks()self.__downloadArticles()'''获得所有文章的链接'''def __getArticleLinks(self):print('[INFO]: 正在获取目标公众号的所有文章链接...')fp = open('links_tmp.json', 'w', encoding='utf-8')article_infos = {}params = {'action': 'getmsg','__biz': self.cfg.biz,'f': 'json','offset': '0','count': '10','is_ok': '1','scene': '123','uin': '777','key': '777','pass_ticket': self.cfg.pass_ticket,'wxtoken': '','appmsg_token': self.cfg.appmsg_token,'x5': '0'}while True:res = self.session.get(self.profile_url, params=params, verify=False)res_json = res.json()can_msg_continue = res_json.get('can_msg_continue', '')next_offset = res_json.get('next_offset', 10)general_msg_list = json.loads(res_json.get('general_msg_list', '{}'))params.update({'offset': next_offset})for item in general_msg_list['list']:app_msg_ext_info = item.get('app_msg_ext_info', {})if not app_msg_ext_info: continuetitle = app_msg_ext_info.get('title', '')content_url = app_msg_ext_info.get('content_url', '')if title and content_url:article_infos[title] = content_urlif app_msg_ext_info.get('is_multi', '') == 1:for article in app_msg_ext_info.get('multi_app_msg_item_list', []):title = article.get('title', '')content_url = article.get('content_url', '')if title and content_url:article_infos[title] = content_urlif can_msg_continue != 1: breakelse: time.sleep(1+random.random())json.dump(article_infos, fp)fp.close()print('[INFO]: 已成功获取目标公众号的所有文章链接, 数量为%s...' % len(list(article_infos.keys())))'''下载所有文章'''def __downloadArticles(self):print('[INFO]: 开始爬取目标公众号的所有文章内容...')if not os.path.exists(self.savedir):os.mkdir(self.savedir)fp = open('links_tmp.json', 'r', encoding='utf-8')article_infos = json.load(fp)for key, value in article_infos.items():print('[INFO]: 正在抓取文章 ——> %s' % key)key = key.replace('\\', '').replace('/', '').replace(':', '').replace(':', '') \.replace('*', '').replace('?', '').replace('?', '').replace('“', '')\.replace('"', '').replace('


推荐阅读