当前位置:聪少自媒体网 > 今日头条 > 正文

爬取今日头条小心(新)得

2020-10-05 今日头条 聪少自媒体

如上图所示,爬取的结果不是我们想要的,想要的是axjs请求后被渲染的网页代码。

随便搜索一个关键词后,经过查找发现渲染的文件在xhr的json文件中,如图:

由此可见每个结果页面的链接都在dada:[0:{***,***,article_url:链接},1:{***,***,article_url:链接},***]这个字典结构中,再看一下消息头和参数里的信息:

由上面可以得到参数,因为是get请求,这些参数就直接附到https://www.toutiao.com/api/search/content/?后面,当在网页上继续往后拖动查询结果,又会有新的xhr的json文件出来,这时我们再看一下参数:可以看到offset参数变成20,再往下托,offset参数就会变成40,keyword就是搜索的关键字,其他固定参数不用操心。所以摸清了规律,我们开始爬,代码我不会具体展示,只是列出大概的功能,:

1.开始爬取搜索结果页面:

先将参数弄到data字典,header请求头感觉还是要加的,不加有时无法访问这个页面

用urllib.parse 下的urlencode将字典转化为url链接附加在https://www.toutiao.com/api/search/content/?后面,防止乱码的化可以加个encoding。

2.当爬取到这个json文件内容后:

因为爬下来都是str字符串格式,所以用data=json.loads(html)将其转化为python中的字典对象来操作,操作字典来获取里面的url肯定更容易。然后判断json文件是否爬取下来了,并且其中是否有data的键名,因为前面分析了,url都在data的键值中。判断键值是否存在,有时虽然有data这个键,但值可能为空。获取到url后用yield生成器迭代。

3.获取到url的列表后,先分析每个页面其中结构,再爬取每个具体结果页面。查找后发现页面中的图片链接在原始的html中,通过上面url链接爬取到的也只能是没有被渲染的原始的html页面:

具体响应体中,:

可以看到其中的链接都藏在js代码中。

但是,我发现结果页面中还有一种组图页面:

刚刚的是普通的页面图片链接,组图链接藏的地方也是原始html,但不太一样:

爬取这个结果页面:

好了,两种页面图片链接地址都找到,接下来解析提取链接,当然搜索结果中还有除此之外其他页面,我们只爬这两种页面的图片,其他过滤掉

4.解析页面。

用BeautifulSoup下的select获取页面标题(也可以用其他的)。然后最核心的东西来了,正则,普通图片的匹配要简单,不说。组图的正则因为图片链接中参杂了’’,所以匹配‘’就有点烦。主要就是加r’’,就能匹配(反正我这样子能匹配),其他部分可以有你自己喜欢配。匹配url出来的放在列表,通过字典返回。

5.

保存数据到mongodb数据库,其中的常量我放在别的配置文件中,最后给出

6,下载保存图片

其中今日头条图片是相对路径,随你设置。根据图片链接下载图片,保存。response.content是获取内容的二进制数据,因为MD5检验数据后hexdigest()必须是二进制数据。

7.mian()

因为map()中好像不能有None,并且None不能迭代,所以尽量过滤掉。其实也是可以直接 if html的,就懒得改了

8.配置文件,可以直接在其中修改常量

也是第一次发这种博客,并且是新手,有错误的地方多多理解,希望能帮到有缘人

聪少爱学堂聪少
聪少爱学堂创始人,梅州市鹏鑫网络科技有限公司CEO,09年开始踏入互联网,10年互联网行业经验,资深自媒体人,自媒体优秀导师,咪挺微商团对营销引流顾问,业务包含:精准引流技术/代引流精准粉,专业小红书,知乎,微博代运营。
  • 38988文章总数
  • 1491135访问次数
  • 建站天数
  • 合作伙伴