码迷,mamicode.com
首页 > Web开发 > 详细

分析Ajax请求并抓取今日头条街拍美图

时间:2018-04-22 16:03:14      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:headers   get   生成   提取   tail   header   字段   img   没有   

准备工作

requests、Beautiful Soup、MongoDB

抓取分析

在抓取之前首先分析抓取的逻辑,打开今日头条的首页https://www.toutiao.com/如图

技术分享图片

右上角有一个搜索入口,这里尝试抓取街拍美图,所有输入“街拍”二字,搜索一下,结果如下图所示:

技术分享图片

这时打开发者工具,查看所有网络请求,首先打开第一个网络请求,这个请求的URL就是当前的链接:https://www.toutiao.com/search/?keyword=街拍

技术分享图片

刷新一下界面,查看响应结果,如下没有找到页面上的内容

技术分享图片

切换到XHR查看,找到了我们需要的信息

技术分享图片

article_url就是内容详细的链接

技术分享图片

技术分享图片

再看一下Headers,这是我们需要构造的请求参数

技术分享图片

进入内容详细页查看响应信息,找到了每个图片链接的页面是在Doc:

技术分享图片

技术分享图片

实战演练

刚才分析了Ajax请求的逻辑,下面就用程序来实现美图下载吧。

首先,实现方法get_page()来加载单个ajax请求的结果。其中唯一变化的参数就是offset,所以我们将它当作参数传递,实现如下:

import requests
from urllib.parse import urlencode


def get_page(offset):
    params = {
        ‘offset‘: offset,
        ‘format‘: ‘json‘,
        ‘keyword‘: ‘街拍‘,
        ‘autoload‘: ‘true‘,
        ‘count‘: ‘20‘,
        ‘cur_tab‘: ‘1‘
    }
    url = ‘https://www.toutiao.com/search_content/?‘ + urlencode(params)
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.json()
    except requests.ConnectionError:
        return None

这里我们用urlencode()方法构造请求的GRT参数,然后用requests请求这个链接,如果返回状态码为200,则调用response的json()方法将结果转为JSON格式,然后返回。

接下来,再实现一个解析方法,:提取每条数据 的image_detail字段中的每一张图片链接,将图片链接和图片所属的标题一并返回,此时可以构造一个生成器,实现代码如下:

 

分析Ajax请求并抓取今日头条街拍美图

标签:headers   get   生成   提取   tail   header   字段   img   没有   

原文地址:https://www.cnblogs.com/0bug/p/8907262.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!