前面一篇文章用Python抓取某大V的公众号文章由于做的时间比较仓促还留下了几个问题:
友情提示: 所有的抓包操作,请用自己的微信小号来操作,我不知道官方会不会有封号操作,反正小心使得成年船!
我发现这里返回的数据有一个next_offset这个字段,看意思就是想下一页的数据偏移量,于是我把数据每次取出来之后,重新赋值,发现数据果然没有再次重复了.
self.offset = all_datas['next_offset'] # 下一页的偏移量
self.request_data()
我在Charles中不断抓取数据,发现在抓取到尾页的时候,发现 can_msg_continue 状态变为0了,于是有了这一行代码
if 0 == all_datas['ret'] and 1 == all_datas['can_msg_continue']:
很多时候我比较喜欢原创文章,也深深尊重这些原创工作者,他们的文章都花费了大量心血,公众号正好有原创标记,所以我猜应该有原创字段标识, 我通过Charles抓包分析, 发现 copyright_stat
这个字段与版权意思比较接近,然后再进一步分析,发现这个状态等于11的时候,是为原创
copyright = data['app_msg_ext_info']['copyright_stat']
copyright = '原创文章_' if copyright == 11 else '非原创文章_'
完整的抓取数据代码就是这些:
def parse_data(self, response_data):
all_datas = json.loads(response_data)
if 0 == all_datas['ret'] and 1 == all_datas['can_msg_continue']:
summy_datas = all_datas['general_msg_list']
datas = json.loads(summy_datas)['list']
for data in datas:
try:
title = data['app_msg_ext_info']['title']
title_child = data['app_msg_ext_info']['digest']
article_url = data['app_msg_ext_info']['content_url']
cover = data['app_msg_ext_info']['cover']
copyright = data['app_msg_ext_info']['copyright_stat']
copyright = '原创文章_' if copyright == 11 else '非原创文章_'
self.count = self.count + 1
print('第【{}】篇文章'.format(self.count), copyright, title, title_child, article_url, cover)
self.creat_pdf_file(article_url, '{}_{}'.format(copyright, title))
except:
continue
time.sleep(3)
self.offset = all_datas['next_offset'] # 下一页的偏移量
self.request_data()
else:
if 0 == all_datas['can_msg_continue']:
exit('数据抓取完毕!')
else:
exit('数据抓取出错:' + all_datas['errmsg'])
仅仅把文章抓取到完全不能满足我的兴趣,我想把有价值的公众号文章放到本地自己来查看一下,于是我就有了我把文章转成pdf 文档的想法,怎么把文章转成pdf文档呢,
分下面三步操作:
self.config = pdfkit.configuration(wkhtmltopdf='C:/Program Files/wkhtmltopdf/bin/wkhtmltopdf.exe') # 这里需要配置一下wkhtmlpdf.exe路径
def creat_pdf_file(self, url, title):
try:
file = 'D:/store/file/{}.pdf'.format(title)
if not os.path.exists(file): # 过滤掉重复文件
pdfkit.from_url(url, file, configuration=self.config)
except Exception as e:
print(e)
效果图如下:
缺点还是有的,网页中的图片无法写入在pdf文件中,另外这个pdfkit用法还有很多,这里我就不深入了,有兴趣的朋友可以自行深入!