爬取今日头条街拍图的一次教训

本 来只要按照崔大大的步骤一步一步做下去,啥问题没有。

但我看完他的操作之后,自己操作了一遍。在街拍_头条搜索这个页面发起ajax请求并没有遇到什么问题,然后理所当然的访问其中一个子页面

什么都没有想,我就直接看了一下浏览器有没有ajax请求,看了一下ajax(XHR)的内容发现里面有图片地址,就开始分析请求的参数,有三个参数是一直变化的as、cp、_signature。接着在众多的js文件中搜索_signature这个,看了一个JavaScript代码,发现自己根本看不懂,其中这个印象深刻 (0,h.default)(i + “”) 这是个什么语法。。。

然后突然想了想,既然pc端的爬不了,能不能爬手机端的,就将谷歌浏览器改为手机访问,看了一下ajax内容,再看了一下请求参数,刷新了几遍,发现只有第一个parent_rid是变化的,而且看这变化好像是随机的,我就直接带入一个值,用requests构造url,这又出现了一个问题。

请求参数有两个sum:5,sum:15,code_id:14798012085000246,code_id:14798012085000246,这就不能直接构造字典了,因为字典的键不能重复。只能用urllib.parse来构建。urlencode和requests一样,只能将字典改为字符串列表,先将中文用urllib.parse.quote()变为url编码,再自己加等号,用‘&’.join()拼接一下(感觉这个也可以手工加上去)。之后发起请求,url为https://m.toutiao.com/i6589113068687458830/,得到了json数据,然后用re提取图片链接,把链接的图片下下来。

当我以为差不多完成了的时候,去看了一下下载的图片,这都是些什么图,我漂亮的小姐姐的高清大图呢。于是回浏览器看了一下ajax请求的内容,对比一下浏览器,原来ajax加载的都是热门推荐,并不是我要的内容。不在ajax里,应该在源代码里吧 ,requests发起请求将源代码保存到本地,搜索了一下图片链接的关键几个词,没有内容???这怎么回事。难道是js动态渲染的。。

在论坛里发个帖子,求助了一下,顿时无语,原来pc端子页面的响应内容里就已经包含了我要的内容,查看了一下电脑端的ajax,这居然也不是正文的内容。我绕了这么一大圈,是在干嘛。

哎,没有经验的小白真的难受。回头看了看崔大大的代码,这。。。

你可能感兴趣的:(Python)