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

优采云 发布时间: 2022-03-26 02:21

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

)

  最近迷上了*敏*感*词*,每天都在X News的平台上着迷。我的同学H也是这次活动的负责人(退费)。不仅我们同学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 running on port 25555,这其实是 pyspider 用 phantomjs 运行,在加载 AJAX 页面时非常有用。

  三、分析页面

  打开某一章的阅读页面,如扑克之王邱大卫传-老邱-电子书-在线阅读-网易云阅读,打开调试工具Firebug。

  

  选择 net 选项卡,这样您就可以在打开网页时看到页面加载过程。

  

  一个阅读页面需要这么多资源!其实还有很多不用管,切换标签到HTML,

  

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

  

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

  那么章节在哪里呢?

  将选项卡切换到 XHR,

  

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

  

  最明显的 json 字段之一是 content,这很可能是我们想要的。但是这个字符串要编码,常规的套路是base64编码,因为它不是敏感数据。试试看,打开浏览器的hack bar,将内容复制进去,在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的头尾都加到count里,把扩展名改成html,这样就可以用浏览器打开,图片就可以了。

  

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

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线