在最近的需求中需要对今日头条的数据进行爬取,于是花了两天多的时间,终于爬下来了,下面直接进入正题。
分析思路
在爬取网站之前,按照套路先打开网站分析一下,确定一下整体的思路。
主要是获取web网站主页下的资讯新闻url,再通过url拿到详情页的正文,先打开开发者工具对主页进行抓包
主页的html没有数据信息,页面数据应该是ajax传递的,在调试接口中找一下有没有接口
发现了这个,应该是我们要找的东西,找到request_url,是我们要拿到的接口链接,
简单分析了下主要是max_behot_time、as、cp、_signature这几个参数在变化,max_behot_time在返回的json文件最后能拿到,其他几个参数很明显是加密了,全局搜索参数,在index.88f72107a4b3405 -27de1.js里面找到了as、cp,打上断点调试,确认e就是as、cp的值,
这两个参数应该是md5加密的,把整个函数扣出来,用python调用。
下面再找下_signature,发现p就是_signature函数隐藏的地方
找到p函数所在的js
打上断点,可以看到通过将其他参数拼接的a传给window.byted_acrawler.sign()方法进行加密,最后返回_signature参数的值。
这样就是最后完整的请求链接,在浏览器里测试一下,果然是有数据的,这里就不放图了,然后写个js接口去调用node执行
再用python去解析返回的json包,可以拿到资讯信息的title,url之类的,算是爬取成功了。但自己这边需求比较特殊,需要获取到正文详情页面的信息,本来以为直接拿HTML就行,但发现并不是这样。
详情页也是用JS渲染的,找了一会并没有定位到文件,最后发现response返回结果里有个content值,包含了正文,直接请求页面,最后通过正则拿到详情数据。