抓取网页生成电子书(只要能显示在网页上的东西都可以抓下来。。 )

优采云 发布时间: 2021-10-15 11:08

  抓取网页生成电子书(只要能显示在网页上的东西都可以抓下来。。

)

  最近,我迷上了*敏*感*词*。我的同学H是这次活动的领队(tuifei)。我们同学不仅PK了,还给我发了截图,WC,你也买了书,你也进了群,你快上天堂了。. .

  晚上11点30分,我用我的房门打开他房间的门,他果然在床上。

  H,有资源吗?

  不是,X宝上贴的和我下载的一样,只有44页,前十页是广告。

  哎,无良商家,退款?

  不,只有1.00元,她又给了我一本书。

  来看看澳门*敏*感*词*上线的感觉吧。

  回去jd上找,电子版18元,纸质版什么的。没有微信阅读。

  第二天,我在实验室遇到了H。还有其他资源吗?

  恩,网易阅读上有,我付费了。

  第一次听说网易读书,周末在他的实验室度过。

  神奇的是网易云阅读器可以在网页上打开查看。

  

  有这样的操作吗??

  我发现了一些东西,

  

  WC,网易太甜了!

  太甜了,我也想为此把文字记下来。

  换句话说,只要能在网页上显示,就可以被捕获。

  一、创意的产生

  要么使用现成的工具,比如优采云,来抓取网络上的数据,但使用这个工具显然是一个失学的人。要么使用开源框架,然后在知乎上有一个非常流行的“爬虫”。玩爬虫的人很多,请自己知乎。用的比较多的框架有scrapy、pyspider等,前者比较低级,搞这个工作的人玩这个比较专业。后者非常适合新手玩,带有WEUI,网页上的可视化操作,非常方便。这篇文章懒得用pyspider。

  二、设置环境

  这部分我其实是一年前做的,不过当时我用的是windows平台。现在再看pyspider的官网,发现windows的缺点很多,而且pyspider的开发也是在linux平台上进行的。所以即使我是新手,也得在linux上使用环境。(pyspider 文档在这里)

  对于Linux发行版的选择,官网列出了几个,centos(我的VPS上用的那个),ubuntu等。考虑到用浏览器,可能需要带桌面的linux系统。于是我在我的windows10上的vbox上安装了centos,后来发现安装桌面环境真的太慢了​​。突然发现自己太傻了。真的,我安装了一个Kali系统(我前段时间学会了安装)。Kali是基于Debian的发行版,ubuntu也是基于Debian的,所以使用kali应该没有问题。

  参考pyspider帮助,pyspider中文网站

  首先安装pyspider

  apt-get 安装 pyspider

  然后安装phantomjs

  apt-get 安装 phantomjs

  是不是很简单。Phantomjs 是一个无界面浏览器,用于完全模拟用户在浏览器上的操作,用于处理比较麻烦的问题,比如运行js、异步加载网页、响应网站反爬策略。另外,这款浏览器比IE、Chrome、Firefox等界面浏览器要快很多,详情请参考/。

  安装成功后,在终端输入pyspider

  

  提示phantomjs fetcher运行在25555端口,这个其实是pyspider用phantomjs运行的,所以在加载AJAX页面的时候很有用。

  三、分析页面

  打开某章的阅读页面,如《副王:秋雨传》-老秋-电子书-在线阅读-网易云阅读,打开调试工具Firebug。

  

  选择net标签,这样在打开网页的时候就可以看到页面加载的过程。

  

  一个阅读页面需要这么多资源!其实还有很多东西是不需要关心的,把tab切换成HTML,

  

  其实请求只有两个,第一个在域名下,第二个在下。可以假设第二个与此页面的内容几乎没有相关性,可以用于统计目的。查看第一个请求

  

  具体不说了,反正回复里没有章节内容。

  那么章节内容在哪里呢?

  将选项卡切换到 XHR,

  

  收录 4 个异步请求。从 URL 和接收数据的时间(时间轴上的绿色部分),可以猜测最后一个是获取章节内容的请求。其实就是一一点击查看接收到的数据。可以看到上次请求返回的数据是一个json数据。

  

  很明显,json的一个字段就是content,这很可能就是我们想要的。但是这个字符串要编码,常规套路是base64编码,因为不是敏感数据。试试看,打开浏览器的hack栏,把内容复制进去,在Encoding里面选择Base64Decode

  

  结果是

  

  你看到了什么?乱七八糟的胡言乱语。

  不完全是,有

  人物。这说明content的内容确实是base64编码的,但是汉字的解码有问题。

  这时候使用pyspider的返回数据的json方法提取json数据,然后尝试解码收录中文的内容:

  

  得到了答案

  

  本来以为和中文打交道要花点时间,没想到一次就成功了。

  四、登录问题

  其实最难的不是找到文章的内容,而是以注册人的身份访问网站。这个问题从周末的两天,到周一的一整天的战斗,到周二的放弃,再到周三的重新审视这个问题,我真的学到了很多。我遇到的问题不是因为问题本身的难度,而是因为我对它的理解深度。了解的越深,把握的就越准确。一个人摸索的时候,一开始很兴奋,渐渐地我怀疑自己,这个问题有没有办法解决?还是自己的能力差距很大?

  周三,我冷静下来,重新组织了登录流程、cookie 交付流程,并将每次 cookie 更改记录在草稿纸上。最终在不断的尝试和推理中找到了正确的应用方法,作为登录者成功获取了数据。其实核心就是cookie的交付,但是摸索的过程太长了,我也是菜鸟。

  五、数据的后处理

  后处理其实很简单,上面已经正确解码了,下面只是将其写入文件。

   def detail_page(self, response):

results=response.json

content=base64.b64decode(results['content'])

fo = open('/root/Documents/davidchiu2.txt','a')

fo.write(content)

fo.close()

return {

# "content": content,

"content_cn": content,

}

  将结果保存到txt文件中,如下

  

  因为有html的段落格式,还有图片的链接,加个html header和end,把扩展名改成html,这样用浏览器打开就可以看到图片了。

  

  然后将页面上的文字和图片全部复制到word,排版后导出PDF,完美。

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线