目录
- 敲黑板
- 抓包分析
- 看碟下菜,确认分析思路
- 锁定有效数据包
- 分析响应信息和请求连接
- 黑板报
- 如何用xpath保存网站源码
- 如何精简你的文章请求链接
- 如何将文章转化为pdf文件,不乱码,不报错
- 总结
敲黑板
本章主要运用的知识点:
如何用xpath保存网站源码
如何精简你的文章请求链接
如何将文章转化为pdf文件,不乱码,不报错
抓包分析
看碟下菜,确认分析思路
首先,我们打开fd抓包工具,这个不会的可以百度查一下,操作很简单的,你浏览器f12会用,fd也很容易上手。
首先打开一个公众号,我们用fd抓包工具看一看
我们首先往文章下方滑动,这种平台一般都是ajax请求,因为一个公众号的文章会非常非常的多,不可能用一个或几个数据包就能搞定。
锁定有效数据包
那我们就一直往下滑动,看看哪个包很可疑
显示的包就这几类,图片类型的数据包根本不用看,直接排除,很明显js的数据包很可疑,那我们就打开看看
分析响应信息和请求连接
我们发现编号为3和44的连个包就是实际加载出的有用数据。他们的链接非常相近,返回的都是json数据。通过json解析,可以看到一下数据。(有一些内容可以用翻译软件翻译)
关于这些代表的含义,我都放到图片上了。至于怎么知道这些数据意思的。我个人的建议是多抓几个相同类型的数据,然后放在一起对比他们到底啥意思。再就是多用翻译软件翻译一下他们的意思,就能大致推测出他的意思了(贼羡慕那些英语好的人)
再看看链接:
fd正确提取链接的姿势
选中链接,右键选择copy,再选择just url即可复制
https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz=MzAxMDY0ODUxMw==&f=json&offset=10&count=10&is_ok=1&scene=124&uin=MTE3MjUxNTc2&key=542f0975b77f604f0e3521f4da1bd512ff02357891633b7f01a38d924a645645c8eb808d64aba651d9e55c3d9444ba961fbf909bc8ebdd8fc15b0deae9d2d391b5b9a0f9e6e7b63eb7c1f1378d6d20668ff64d64147ca4abab8048d9df34277ede91dba1619956daa6b8a4842a013b2f2f9eca0e63b773bfcb36687e4a5b0a92&pass_ticket=69imYjSMks9IGfcK7X8eE5w4jUQFOF%2FUtvxsrnWVbwrXhYXUtFg7yR%2Fr0BstOVnf&wxtoken=&appmsg_token=1123_mqum%252BOJVFmZIEYAasjmKkpKmtg8S0iWMVLRJXQ~~&x5=0&f=json
他的数据很多,链接很长,为我们产生了很多的困扰,既然这样,我们就用fd自身的工具来获取
在这里,我们可以看到请求链接中的参数信息。通过测试,我可以明确告诉大家,这里面有些东西是可以删除的。
这么做的好处是,精简提交链接(说实话,我感觉在这块易语言比python方便好用多了),有些值不容易获取,写死了不行,不写死你还找不到数据,但是可以直接删掉。嘿,这是不是爽歪歪。
这里我给大家一些提示,可以先复制链接到一个文档中,再一个参数一个参数的删,删一个,我们拿到浏览器上访问,有数据就是可以,没数据就不行了。如果你对包的分析经验够多,那效率会更高。
至于有一些有变动的数据,我在上文的图片中有所提示,请仔细阅读吧,爬虫这个东西有时效性,也许此时你看到这篇文章实在若干年之后,你从我这里只能得到思路,而不是一段直接复制就能用的代码!
黑板报
如何用xpath保存网站源码
将相应信息返回为字节码
用xpath完成解析,获取指定的源码
再将数据编码为utf-8的正常文件
注:别问我这什么原理,我真的不是太懂python的编码(由于易语言的编码转化过于方便,导致我在python的转化中遇到了很多困扰)。但你这么弄,肯定不会乱码或报错,出问题也是你xpath解析的问题,这都是我百度学的,(_ _)。゜zzZ
response = requests.get(url, headers=headers)html = etree.HTML(response.content)ret = html.xpath('//*[@id="js_content"]')[0]message = etree.tostring(ret, encoding='utf-8').decode('utf-8')
如何精简你的文章请求链接
在上文的分析请求信息时,已经说了哈
如何将文章转化为pdf文件,不乱码,不报错
我百度了好多文章,发现pdfkit这个库最常用,我也是用这个的。
先导入这个库:pip install pdfkit
他这个东西是基于一个国外程序,而运行的,这也是我有点讨厌他的一个原因。软件名:wkhtmltopdf 他是有官网的,不过我没梯子,下载不了,我是在国内的网站上找到了他的安装程序,然后下载直接默认到c盘即可。他真的不大!不会让你的c盘爆红滴。
接下来就是这一套了,直接复制就行,没什么技术含量,不需要背。
path_pdf = r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'config = pdfkit.configuration(wkhtmltopdf = path_pdf)pdfkit.from_string(content,'./pdf/'+filename+'.pdf',configuration=config)
要说一下,最后一个pdfkit.from…这个,他有三种方法,一种是将字符串打印为pdf,一种是将文件变pdf,还有一种是url变pdf
1其中用url变pdf最爽,但是很容易报错,只能看这挺爽就是了,实际上刚开炮就软了,啥也不是。2至于存放为pdf,这东西不上不下的,没啥意思,因为他需要将源码保存到本地,效率低3推荐字符串转化为pdf,效率还好,很少报错
同时链接里面也有一下花花,有时候下载下来的链接,源码都在,但是显示不出文字和图片。给你一下这个方案
先设置一个html,其中的message是存放文章源码的地方。因为你不可能把全部的文章源码都打印,总会有一些广告和乱起八糟的东西。我们只将与文章相关的数据保存。
html_page = '''<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"></head><body>message</body></html>
'''
思路:
1保存跟文章有关的有效数据,存放到message中,如果message中有hidden和data+src字样通通更换,解决了文字和文章无法显示的问题
2将处理后的数据装进html中
3最后将完整的字符串打印出来。
response = requests.get(url, headers=headers)html = etree.HTML(response.content)ret = html.xpath('//*[@id="js_content"]')[0]message = etree.tostring(ret, encoding='utf-8').decode('utf-8')content = html_page.replace('message', message).replace('hidden', 'visible').replace('data-src', 'src')path_pdf = r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'config = pdfkit.configuration(wkhtmltopdf = path_pdf)pdfkit.from_string(content,'./pdf/'+filename+'.pdf',configuration=config)
总结
个人是有一些不爽的地方:这个pdfkit必须要安装一个对应的软件。如果打包发给别人,那这个程序还要打包给他们
所需要的关键数据,提取有些麻烦,可以通过分享链接提取,但是需要微信的ck,打包发给别人使用困难。
我的方法是,下载notepad ,选中公众号上的一小段文字,然后复制
打开notepad,选择编辑
点击选择性粘贴,然后粘贴为html
其中SourceURL中存放有重要数据,可以提取使用,
优点:方便,不要微信ck
缺点:链接有有效期,不确定准确时间,不过也能用很久。
在提取源码的过程中,我发现别人用beautifulsoup提取源码的方式比xpath方便多了 ,打脸。我以前还不屑于用beautifulsoup,看来是我的见识短浅了,多一点了解,可能就是多一条思路了,这一点别学我了
哎呦,说是总结,怎么洋洋洒洒说了这么多废话,溜了溜了,我们下次再见吧。打造个人的技术影响力,还是任重而道远啊。有什么建议欢迎评论区留言,我们一起讨论。
娘嘞,有是和程序员斗智斗勇的一天。