我们主要解析其中的 owner.name 和 text,其他信息我们暂时不关心,比如是对谁谁谁的回复,我们暂时只把评论列举出来。
# 评论解析 comments = topic.get('show_comments') comments_str = '' if comments: for comment in comments: comments_str += comment.get('owner').get('name') + " : " + handle_link(comment.get('text')) comments_str += '<br><br>'最终评论展示效果:
优化 中文问题生成 PDF 后,打开发现中文全部显示为方框,如下图:
这表示服务器未安装中文字体,安装字体即可,安装下面说明;
查看目前安装字体:fc-list
下载所需字体,例如 fangsong_GB2312.ttf
mkdir /usr/share/fonts/zh_CN
cp fangsong_GB2312.ttf /usr/share/fonts/zh_CN
执行fc-cache -fv
查看是否安装成功:fc-list,查看是已安装
重新生成后,一切 OK:
页面空白优化生成成功,但是返现每篇文章默认都是新的一页,出现大块空白,阅读时非常别扭,于是我想着是否可以进行优化。
之所以是一篇星球推文显示成单独的一页,是因为原作者处理时,是将推文分别保存成 HTML 文件进行处理,然后再转换成 PDF。
那么我的思路就是,将每篇推文放在单独的 <body> 里,最后合并成一个 HTML,这样最终显示的就是连续的页面了。
修改前:
修改后:
超链接优化在原作者的代码中,没有对超链接进行处理,而星球中有大部分都是进行超链接的分享。
没有处理的原因是,抓取到的代码中,超链接是这种形式的:
<e type="web" href="http://www.likecs.com/https%3A%2F%2Fmp.weixin.qq.com%2Fs%2Fw8geobayB8sIRWYcxmvCSQ" title="5000%E5%AD%97%E9%95%BF%E6%96%87%E5%91%8A%E8%AF%89%E4%BD%A0%EF%BC%8CSEO%E6%AF%8F%E6%97%A5%E6%B5%81%E9%87%8F%E5%A6%82%E4%BD%95%E4%BB%8E0%E5%88%B010000%2B" cache="http%3A%2F%2Fcache.zsxq.com%2F201808%2F732760494981a6500d8aadf0469efbf205c21d23ca472826f13e127799973455"/>发现是用 <e> 标签包围的,这不是 HTML 原生标签,所以导致无法解析,进而页面也无法展示,我们要做的就是从中解析出超链接内容,并拼接成 HTML 中的超链接。
另外,发现超链接的 URL 是转码后的内容,我们也需要对其进行处理。
这部分的处理代码如下:
# 对文本进行 URL 解码,要不后面解析处理也无法点击 def handle_link(text): # 星球中用 <e> 表示超链接 # 这里我们进行转换 soup = BeautifulSoup(text,"html.parser") links = soup.find_all('e', attrs={'type':'web'}) if len(links): for link in links: title = link.attrs['title'] href = link.attrs['href'] s = '<a href=http://www.likecs.com/{}>{} </a>'.format(href,title) text += s # 清理原文中的 <e> 标签 # 这里不清理也没问题,HTML 解析不了,页面也不会显示 # 但是,强迫症。 text = re.sub(r'<e[^>]*>', '', text).strip() return text处理后:
当然,最好的方式是把超链接的内容也爬取出来,一并放在 PDF 里,这里我就不搞了,有兴趣的尝试下吧。
换行处理换行在星球上显示是这样的:
但是到 PDF 后,换行全部没了,大段文字看起来很费劲:
这个处理起来就比较简单了,只要将返回数据中的 \n 替换为 HTML 中的换行标签 <br> 即可:
例如获取精华正文时:
text = handle_link(unquote(content.get('text', '').replace("\n", "<br>")))需要注意的是,需要在解码之前进行替换。
效果:
至此,基本需求已完成。
完整代码关注公众号后回复【星球】即可获取。
如果觉得有用,欢迎关注我的微信,一起学习,共同进步,不定期推出赠书活动~
最近搜集到传智播客 2018 最新 Python 和 Java 教程!关注本公众号,后台回复「2018」即可获取下载地址。