前言

在参考《Python3网络爬虫开发实战》学习爬虫时,练习项目中使用 requests ajax 爬取今日头条的“街拍”图片,发现书上的源代码有些已经不适合现在了,报了一些错(毕竟网站也在不停变化)。

变化、报错及解决方法

  1. 爬取的 ajax 结果中 data 为 None,原因是在头条网站搜索“街拍”后多了个图片验证。

    解决方法:使用 headers 加上Cookie。

  2. 第54行 for image in images 报错TypeError:‘NoneType’ object is not iterable(类型错误:“NoneType”对象不是可迭代的) ,原因是爬取结果中有些 image_list 为None。

    解决方法:在 for 遍历前,加上 if images: 判断是否为None。

  3. 书上源代码是直接把图片存放在当前 py 文件所在目录下,太不美观了。

    解决方法:新建 images 文件夹,在爬取开始前提前切换到图片存放目录 images ,在第93行切换 os.chdir(‘images’) ,之后新建的图片文件夹都是在 images 文件夹下面。注意要在爬取开始前切换,不然会出现多次切换的报错。

完整代码

import requests
from urllib.parse import urlencode
import os
from hashlib import md5headers = {'cookie': '__tasessionId=ampozol5g1563806844189; tt_webid=671649' +'9234256455175; WEATHER_CITY=%E5%8C%97%E4%BA%AC; UM_distinctid=16c' +'1a26e5e12df-040ada0c1d8081-c343162-100200-16c1a26e5e428c; CNZZDAT' +'A1259612802=945869726-1563806204-https%253A%252F%252Fwww.google.c' +'om%252F%7C1563806204; tt_webid=6716499234256455175; csrftoken=46' +'a41d4141000920aea9354904736a2d; s_v_web_id=2b8f7242614ce9f3dd7cbf' +'26d932530d','host': 'www.toutiao.com','referer': 'https://www.toutiao.com/search/?keyword=%E8%A1%97%E6%8B%8D','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit' +'/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36','x-requested-with': 'XMLHttpRequest'
}def get_page(offset):params = {'aid': '24','app_name': 'web_search','offset': offset,'format': 'json','keyword': '街拍','autoload': 'true','count': '20','en_qc': '1','cur_tab': '1','from': 'search_tab','pd': 'synthesis','timestamp': '1563782026489'}url = 'https://www.toutiao.com/api/search/content/?' + urlencode(params)print(url)try:response = requests.get(url, headers=headers)if response.status_code == 200:print('suc_1')return response.json()except requests.ConnectionError:return Nonedef get_images(json):if json.get('data'):for item in json.get('data'):title = item.get('title')images = item.get('image_list')if images:for image in images:print('suc_2')yield {'image': image.get('url'),'title': title}else:print('data is none')def save_image(item):# 判断在当前目录下是否存在以参数为名的文件夹if not os.path.exists(item.get('title')):os.mkdir(item.get('title'))     # 在当前目录下创建以参数为名的文件夹try:print('suc_3')response = requests.get(item.get('image'))if response.status_code == 200:# md5摘要算法(哈希算法),通过摘要算法得到一个长度固定的数据块。# md5() 获取一个md5加密算法对象# hexdigest() 获取加密后的16进制字符串。file_path = '{0}/{1}.{2}'.format(item.get('title'),md5(response.content).hexdigest(), 'jpg')if not os.path.exists(file_path):with open(file_path, 'wb') as f:f.write(response.content)except requests.ConnectionError:print('Failed To Save Image')def main(offset):json = get_page(offset)for item in get_images(json):save_image(item)if __name__ == '__main__':groups = [x * 20 for x in range(1, 5)]os.chdir('images')    # 提前切换到图片存放目录for val in groups:main(val)

Python爬虫:爬取今日头条“街拍”图片(修改版)相关推荐

  1. 利用Ajax爬取今日头条头像,街拍图片。关于崔庆才python爬虫爬取今日头条街拍内容遇到的问题的解决办法。

    我也是初学爬虫,在看到崔庆才大佬的爬虫实战:爬取今日头条街拍美图时,发现有些内容过于陈旧运行程序时已经报错,网页的源代码早已不一样了.以下是我遇到的一些问题. 1.用开发者选项筛选Ajax文件时预览看 ...

  2. 爬取今日头条街拍图片

    ** *爬取今日头条街拍图片 * ** # coding=utf-8 import os import re import time from multiprocessing.pool import ...

  3. Scrapy 爬取今日头条街拍图片

    scrapy 爬取今日头条图片保存至本地 之前用 requests 爬取过今日头条街拍的图片,当时只是爬取每篇文章的缩略图,今天尝试用 scrapy 来大规模爬取街拍详细图片. 分析页面 今日头条的内 ...

  4. python爬今日头条组图_python 爬虫抓取今日头条街拍图片

    1. 打开google浏览器,输入www.toutiao.com, 搜索街拍.html 2.打开开发者选项,network监看加载的xhr, 数据是ajax异步加载的,能够看到preview里面的da ...

  5. python爬取今日头条_爬取今日头条街拍图片

    参考于崔庆才的Python爬虫教程,但是崔的视频时间过长,今日头条网站反爬虫也有了变化,因此写下此文章来记录自己的爬取过程遇到的问题,也给大家一些借鉴.欢迎大家讨论. 一.获取索引页. 我们会发现do ...

  6. 使用ajax爬取今日头条街拍图片

    文章目录 分析请求 获取一组信息 解析json 获取图片列表 本地存储 整合功能 分析请求 地址:https://www.toutiao.com/search/?keyword=%E8%A1%97%E ...

  7. 分析Ajax爬取今日头条街拍图片

    # -*- coding:UTF-8 -*- import requests import time import os from hashlib import md5def get_page(off ...

  8. python爬虫今日头条_python爬虫—分析Ajax请求对json文件爬取今日头条街拍美图

    python爬虫-分析Ajax请求对json文件爬取今日头条街拍美图 前言 本次抓取目标是今日头条的街拍美图,爬取完成之后,将每组图片下载到本地并保存到不同文件夹下.下面通过抓取今日头条街拍美图讲解一 ...

  9. python爬取今日头条街拍,Python3今日头条街拍爬虫

    学习了大才哥的在线视频教程,特来这里总结分享一下. 不同于上一篇糗事百科的爬虫,这里爬取今日头条街拍需要分析ajax请求得来的数据. 首先这里是爬取的起始页 可以看到当我们往下拉滚动条的时候,新数据是 ...

最新文章

  1. matplotlib 绘图-barChart
  2. spring-retry----线程内重试
  3. promise中调用ajax
  4. codova添加android慢_Android amp; iOS,请自动开始你们的 battle
  5. 大专计算机应用基础课件,11春大专《计算机应用基础》练习课件.doc
  6. mysql 联表删除limit_sql连表删除 | 深蓝的blog
  7. 【bozj2287】【[POJ Challenge]消失之物】维护多值递推
  8. ubuntu20.04安装nvidia显卡驱动/CUDA/cuDNN
  9. 判断常用贴片元器件正负极简述(嵌入式硬件篇)
  10. 从来没有一种工作叫钱多、事少、离家近
  11. win7搜索文件内容
  12. oracle让电脑变卡以及解决方法
  13. 科研绘图(Matplotlib.pyplot)
  14. Ubuntu18解决:Not creating XLA devices, tf_xla_enable_xla_devices not set
  15. Mingle 2.0 发布了
  16. HTML网页获取当前定位经纬度/地理位置定位/百度定位/高德定位
  17. MVC.Net: 解决Attempted to access an unloaded appdomain的问题
  18. 考研复试c语言面试题,2019考研复试面试问题:你的最大缺点是什么
  19. Python笔记之用turtle库绘制三角函数和反三角函数的图像(考研党福利)
  20. 修炼内功的融云,以通讯中台赋能企业数字化升级

热门文章

  1. nii数据转png图像
  2. OSChina 周二乱弹 ——追妹子最管用的方式
  3. 苏州市区公积金与园区公积金新政策-乙类对比 包括住房公积金
  4. 计算机科学期刊催稿,SOFT COMPUTING
  5. 傲娇大少之——【GET请求和POST请求】
  6. Java--面包师与消费者1(发送与接收线程)
  7. Ping++和BeeCloud的比较
  8. 职校高一计算机课高一,职高高一数学课件
  9. 基于Netty实现的尬聊聊天室
  10. C++中为什么str=new char[strlen(s)+1];中要加1