用Python将公众号中文章爬下来获取文章的html信息
优采云 发布时间: 2021-08-16 01:21
用Python将公众号中文章爬下来获取文章的html信息
公众号里的文章一定是每一篇文章的必读。
有时候我们关注宝物类公众号,会发现它的历史文章有数百甚至数千篇文章,而作者只索引了他认为更好的几篇。太麻烦了。为了解决这类问题,我决定用Python爬下公众号文章。
基本思路爬取
文章crawling 我们使用公共平台的方式。这个方法虽然简单,但是我们需要有一个公众号。如果我们没有官方账号,我们可以自己注册一个。公众号的注册也比较简单。别说了。
首先登录您的公众号,然后依次进行以下操作
通过上面的操作,我们可以得到cookie等信息,我们先把cookie写入txt文件,实现代码如下:
# 从浏览器中复制出来的 cookie 字符串cookie_str = "自己的 cookie"cookie = {}# 遍历 cookiefor cookies in cookie_str.split("; "): cookie_item = cookies.split("=") cookie[cookie_item[0]] = cookie_item[1]# 将 cookie 写入 txt 文件with open('cookie.txt', "w") as file: file.write(json.dumps(cookie))
接下来我们获取公众号文章列表信息,代码实现如下:
with open("cookie.txt", "r") as file: cookie = file.read()cookies = json.loads(cookie)url = "https://mp.weixin.qq.com"response = requests.get(url, cookies=cookies)# 获取tokentoken = re.findall(r"token=(\d+)", str(response.url))[0]# 请求头信息headers = { "Referer": "https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&token=" + token + "&lang=zh_CN", "Host": "mp.weixin.qq.com", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",}# 遍历指定页数的文章for i in range(1, 5, 1): begin = (i - 1) * 5 # 获取文章列表 requestUrl = "https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin="+str(begin)+"&count=5&fakeid=要爬取公众号的fakeid&type=9&query=&token=" + token + "&lang=zh_CN&f=json&ajax=1" search_response = requests.get(requestUrl, cookies=cookies, headers=headers) # 获取 JSON 格式的列表信息 re_text = search_response.json() list = re_text.get("app_msg_list") # 遍历文章列表 for j in list: # 文章链接 url = j["link"] # 文章标题 title = j["title"] print(url) # 等待 8 秒,避免请求过于频繁 time.sleep(8)
保存
通过文章list信息,我们可以得到文章公众号的链接、标题等信息,然后我们可以根据文章使用微信模块获取文章html格式信息关联。模块安装使用pip install wechatsogou就可以了。
这里需要注意的是,我们通过微信模块获取的html信息会存在一些问题。有两个主要问题。一是文章的html信息不全,需要自己补;另一个得到。 html 信息中可能有一些 CSS 样式没有带过来。对于这个问题,我们可以先通过浏览器的开发者工具获取样式,然后手动添加。代码实现如下:
# url:文章链接,title:文章标题def save2html(url, title): # captcha_break_time 为验证码输入错误的重试次数,默认为 1 ws_api = wechatsogou.WechatSogouAPI(captcha_break_time = 3) content_info = ws_api.get_article_content(url) html = f''' {title} {title} {content_info['content_html']} ''' with open(title + '.html', "w", encoding="utf-8") as file: file.write('%s\n'%html)
上面代码中的my.css文件存储了一些没有带过来的CSS样式信息。
用浏览器打开公众号文章的html文件看看效果:
通过上面的显示结果可以看出,我们保存的html文件的显示效果还不错。
参考:
结束