python3 爬取今日头条文章(巧妙避开as,cp,_signature)

使用环境:

  • python3
  • scrapy
  • win10

爬取思路

(一)关于as、cp的生成与_signature的想法

对于今日头条的爬虫,网上搜索出来的文章大多是基于崔庆才(通过搜索爬取美女街拍的方案),怎么说呢,类似这样的虽说是个巧办法,但是用到工作中却是行不通的。在这里,网上是搜了又搜,谷歌,百度都用上了。在这里做一下今日头条爬取文章的几个方案。

  • 一个方案是:破解了as,cp,却没能破解_signature:

今日头条的as、cp破解

用的技术有execjs,一个执行js代码的框架,但是还是不能很好的把浏览器环境(比如Node环境)嵌入进去,

使用了一个PyV8的js库,主要的获取_signature

给出了一段很操蛋的代码:

def get_signature(self,user_id):
   """
   计算_signature    
   :param user_id: user_id不需要计算,对用户可见
   :return: _signature
   """
   req = requests.Session()
   # js获取目的
   jsurl = 'https://s3.pstatp.com/toutiao/resource/ntoutiao_web/page/profile/index_8f8a2fb.js'
   resp = req.get(jsurl,headers = self.headers)
   js =  resp.content
   effect_js = js.split("Function")
   js = 'var navigator = {};\
           navigator["userAgent"] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36";\
        ' +  "Function" + effect_js[3] + 
             "Function" + effect_js[4] + 
        ";function result(){ return TAC.sign(" + user_id + ");} result();"
   # PyV8执行步骤
   with PyV8.JSLocker():
      self.ctxt.enter()  #已在上面初始化过
      vl5x = self.ctxt.eval(js) 
      self.ctxt.leave()
   self.LOG.info("圣诞快乐")
   return vl5x

PyV8这个库在win10上死活安装不上去,后面在centos7环境装好了,执行这一段代码,直接报了个内存不够的错误好像,直接调用TAC.sign的方法却少了Node环境(大一点讲是浏览器环境),还是报错。可能这确实是个方法,不过在简书上反馈的人很少,不知道是我弄不出来,还是他们都弄出来了。

(二)后面索性直接用了自己的方法:
绕过_signature这个参数,直接请求网页端(wap)的数据信息。

右键检查,点击到json一栏,选中其中一个url

URL一:

https://www.toutiao.com/pgc/ma/?page_type=1&max_behot_time=1532168614&uid=4377795668&media_id=4377795668&output=json&is_json=1&count=10&from=user_profile_app&version=2&as=A1054BF5B303CEE&cp=5B5353EC0EEE0E1&callback=jsonp5

URL二:
https://www.toutiao.com/pgc/ma/?page_type=1&max_behot_time=1532166905&uid=4377795668&media_id=4377795668&output=json&is_json=1&count=10&from=user_profile_app&version=2&as=A1C5EB457343CF5&cp=5B53839C4FC53E1&callback=jsonp6
as,cp在之前的文章中,我们已经能够求出来了,现在需要做的就是如何拼接这一串url,

根据上面两个url的对比,我们只需要更换掉max_behot_time,和jsonp

这样整个列表页的数据我们就获取出来了。

image.png

接下来解析详情页的数据,大概就简单了许多。

image.png

查看网页源代码:
这正是我们想要的数据,使用正则获取就可以了。
image.png

到这里我们就将今日头条的数据可以完全爬取出来了。

需要源码的可以加小密圈:

image.png


更多原创博客请访问:

徐代龙的技术专栏

https://blog.csdn.net/xudailong_blog/article/details/78762262

个人博客

猜你喜欢

转载自blog.csdn.net/xudailong_blog/article/details/81150517