今日头条 街拍

import re
import requests
import json
from urllib import request
# 导入os包,建文件夹使用
import os


# 定义headers头
headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}

# ********新建文件夹********
# 判断是否有同名文件夹,无 则创建
# 简历一个总的文件夹,将所有小文件夹放在其中
if not os.path.exists('xiazai'):
    os.mkdir('xiazai')

# 定义url中page的初始值
page=0
# 循环遍历爬取 前3页
for i in range(3):
    # 经过分析获取 offset={} 每次触发ajax增加20 使用.format()进行循环赋值
    url='http://www.toutiao.com/search_content/?offset={}&format=json&keyword=%E8%A1%97%E6%8B%8D&autoload=true&count=20&cur_tab=1&from=search_tab'.format(page)
    # 发起request.get请求
    response= requests.get(url,headers=headers)
    # 可以通过response.json 直接获取转化后的对象(dict)  转化后为字典格式dict
    html_json_dict=response.json()
    # 通过字典中的 键 提取 图片url的存储部位
    data_list=html_json_dict['data']
    # 循环遍历data_list内的内容
    for item in data_list:
        # 经过分析发现 有图片的均存在 article_url字段, 判断article_url 是否存在
        if 'article_url' in item:
            # 从遍历内容中 提取article_url的内容(就是每个标题的 URL)
            article_url=item['article_url']
            # 从获取的网页代码中提取 title (以备建立文件夹时使用)
            title=item['title']

            # ********新建文件夹********
            # 判断是否有同名文件夹,无 则创建
            if not os.path.exists('xiazai'+'/'+title):
                os.mkdir('xiazai'+'/'+title)

            # 通过获取的每个标题的url 发送请求
            response=requests.get(article_url,headers=headers)
            # 将获取的内容转换成 str 类型以便使用 正则 re 匹配提取数据
            html_str=response.text
            # 正则 re 匹配
            pattern = r'gallery: JSON\.parse\((.*)\),'
            match_res=re.search(pattern,html_str)
            # 判断是否匹配到
            if match_res:
                # 通过json.loads()将匹配结果转换为 str格式
                image_dict=json.loads(match_res.group(1))
                # 判断匹配结果是否存在 (担心有的URL存在问题,无法爬取导致程序出错)
                if image_dict:
                    # 通过json.loads将接过转换成字典格式 dict
                    image_dict=json.loads(image_dict)
                    image_url=image_dict['sub_images']
                    print(title)
                    # 通过遍历方法 将获取值中的 url 分别得到
                    for item_url in image_url:
                        item_url=item_url['url']
                        # print(item_url) #http://p3.pstatp.com/origin/pgc-image/15343835441356c4ed1e9ad
                        # 构建图片名称  .split('/') 以/进行分割,取最后一端 路径为download/下
                        name=item_url.split('/')[-1] + '.jpg'
                        # 构建存储路径 及 存储照片的名称
                        image_name = 'xiazai/'+title+'/'+name
                        # ********下载图片方法********
                        request.urlretrieve(item_url, image_name)
                    else:
                        continue
            else:
                print('程序有错')
    page+=20

你可能感兴趣的:(今日头条 街拍)