文章目录

  • 使用Ajax爬去今日头条街拍图片
    • Ajax背景了解
    • 目的:爬去今日头条街拍图片
    • 思路分析
    • F12获取相关数据
    • 代码
    • 结果

使用Ajax爬去今日头条街拍图片

Ajax背景了解

Ajax ,全称为Asynchronous JavaScript and XML ,即异步的JavaScript 和XML 。它不是一门编程语言,而是利用JavaScript 在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。
         通常我们遇到的网页,对于更新内容需要刷新整个页面,这也就是Ajax的优点所在。对于个网页,只需要刷新我们更新的部分,其他内容不比刷新。这个过程其实就是后台和服务器之间的数据交互的过程。获取数据之后在使用js改变网页,这样内网页的内容就更新了。这就是Ajax的功劳。

目的:爬去今日头条街拍图片

思路分析

var xmlhttp;if (window.XMLHttpRequest) {// code for IE7+ , Firefox, Chrome, Opera, Safarixmlhttp=new XMLHttpRequest();} else { //code for IE6, IESxmlhttp=new ActiveXObject (” Microsoft.XMLHTTP ”);}xmlhttp.onreadystatechange=function() {if(xmlhttp.ready5tate == 4 && xmlhttp.status==200) {document.getElementByld("myDiv").innerHTML=xmlhttp.responseText;xmlhttp.open("POST ”,"/ajax /”, true);xmlhttp.send();发送请求
1: 创建了一个XMLHttpRequest  然后调用onreadystatechange属性设置监听
2:调用open()和send()方法向某个链接发送请求
解析内容
3:响应得到之后,onreadystatechange对应的方法便会触动。
4:利用xmlhttp的responseText得到响应的内容-->返回的结果可能是html,json
5:然后在方法中使用js处理
渲染页面目的: 爬去今日头条的街拍美图--保存到本地
思路分析:1:安装requests库2:今日头条首页网址https://www.toutiao.com/3:搜索街拍https://www.toutiao.com/search/?keyword=%E8%A1%97%E6%8B%8D点击XHR以此来确定ajax请求。获取每条图片的url4:分析url的规律Request URL: https://www.toutiao.com/search_content/?offset=0&format=json&keyword=%E8%A1%97%E6%8B%8D&autoload=true&count=20&cur_tab=1&from=search_taba:offset=20&b:format=json&c:keyword=%E8%A1%97%E6%8B%8D&d:autoload=true&e:count=20&f:cur_tab=1&g:from=search_tab进行了多次滚动加载ajax之后,发现所有的url都具有a,b,c,d,e,f,g且只要b在发生变化变化的规律是:0,20,40,60,,,,,以此可以获得count的参数的个数5:通过接口获取数据6:解析数据根据P12查每条数据的image_list的url,返回图片的链接和图片所属的标题。7:下载保存构造一个offset数组,遍历offset获取图片的链接,并将其下载

F12获取相关数据

1:今日头条首页

2:爬去链接的首页

3:链接分析


4:解析数据分析

代码

"""author:jjkdatetime:2018/10/2coding:utf-8project name:Pycharm_workstationProgram function:   爬去今日头条的街拍美图--保存到本地"""
import requests
from urllib.parse import urlencode
from requests import codes
import os
from hashlib import md5
from multiprocessing.pool import Pool# 第一步:定义get_page()加载单个Ajax请求的结果,使用offset作为参数传递
# 1:get请求,requests请求获取页面
def get_page(offset):params = {'offset': offset,'format': 'json','keyword': '街拍','autoload': 'true','count': '20','cur_tab': '1','from': 'search_tab'}base_url = 'https://www.toutiao.com/search_content/?'# 基础链接url = base_url + urlencode(params)# 获取完整图片链接try:response = requests.get(url)# 获取urlif response.status_code == 200:return response.json()except requests.ConnectionError:return None# 第二步:解析方法:提取每条数据中image_detail字段中的每一张图片的链接
def get_images(json):if json.get('data'):# 获取源码中的datadata = json.get('data') # 将获取到的data赋值给datafor item in data:# 遍历data数组if item.get('cell_type') is not None:# 判断获取的类型不是规范continuetitle = item.get('title')# 获取标题images = item.get('image_list')# 获取存储图片url列表for image in images:yield {'image':'https:'+ image.get('url'),'title':title}def save_image(item):# 保存图片路径,os.path.sep:路径分隔符img_path = 'img' + os.path.sep + item.get('title')# 如果路径不存在if not os.path.exists(img_path):# 以获取的img_path创建目录os.makedirs(img_path)try:response = requests.get(item.get('image'))if codes.ok == response.status_code:# 文件路径->图片路径+路径分隔符+格式化# 请求的内容使用哈希函数自动生成文件名file_path = img_path + os.path.sep + '{file_name}.{file_suffix}'.format(file_name=md5(response.content).hexdigest(),file_suffix='jpg')if not os.path.exists(file_path):# 如果文件路径不存在,以二进制写方式写入内容with open(file_path, 'wb') as f:f.write(response.content)print('Downloaded image path is %s' % file_path)else:print('Already Downloaded', file_path)except requests.ConnectionError:# %符号标记转换说明符的开始print('Failed to Save Image,item %s' % item)# 第四步:构造一个offset数组,提取图片链接,并将其下载
def main(offset):json = get_page(offset)# 调用get_page()方法获取请求链接for item in get_images(json):# 遍历get_images()方法print(item)save_image(item)# 保存图片# 定义一个起始页和一个终止页
GROUP_start = 0
Group_end = 7# 第五步 执行函数
if __name__ == '__main__':pool = Pool()# 以x*20为一组的遍历groups = ([x * 20 for x in range(GROUP_start,Group_end + 1)])# map()实现多线程下载pool.map(main, groups)# 关闭pool.close()# 如果主线程阻塞后,让子进程继续运行完成之后,在关闭所有的主进程pool.join()

结果

【Ajax+】爬去今日头条图片相关推荐

  1. 分析Ajax爬取今日头条,下载图片

    这几天打算趁着寒假时间把之前学的爬虫捡回来,发现现在今日头条改了一丢丢.与崔庆才老师有关分析Ajax爬取今日头条街拍美图已经有点出入. 获取搜索结果的ur的方法与崔庆才老师是一样的,这里就不细说了,不 ...

  2. 爬取今日头条图片(解决缩略图问题+MySQL)

    爬取今日头条图片 1. 引言 2. 分析 2.1 获取主页的url 2.2 获取当前页所有文章的链接 2.3 具体文章的信息 2.4 MySQL设置 3.代码 4. 效果 4.1 本地效果图 4.2 ...

  3. [Python3网络爬虫开发实战] --分析Ajax爬取今日头条街拍美图

    [Python3网络爬虫开发实战] --分析Ajax爬取今日头条街拍美图 学习笔记--爬取今日头条街拍美图 准备工作 抓取分析 实战演练 学习笔记–爬取今日头条街拍美图 尝试通过分析Ajax请求来抓取 ...

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

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

  5. 简单爬虫Ajax数据爬取——今日头条图片爬取

    一.Ajax简介 什么是Ajax? Ajax 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创建交互式网页 ...

  6. 爬虫(4)-使用Ajax爬取今日头条表情包图片

    文章目录 爬取今日头条表情包图片 1.获取信息 2.代码 改进 认为有用的话请点赞,码字不易,谢谢. 其他爬虫实战请查看:https://blog.csdn.net/qq_42754919/categ ...

  7. [爬虫笔记01] Ajax爬取今日头条文章

    1.爬取分析 我们首先打开今日头条,搜索"罗志祥" 打开浏览器的开发者工具,红色框中就是我们请求到的数据 将搜索界面的滚动条滑到底,在开发者工具中就可以看到所有请求到的数据,加上前 ...

  8. Ajax爬取今日头条

    今日头条爬取街拍图 (动态页面抓取逆向解析实例) 链接:https://www.toutiao.com/ 目标:爬取今日头条街拍图高清图集 目标网站分析: (索引页分析) 1.进入页面,滑下鼠标,发现 ...

  9. 如何爬取今日头条图片

    本文为项目的练习之一.项目来源网页 https://www.cnblogs.com/qun542110741/p/9145286.html ,项目要求为爬取今日头条搜索关键词为"小姐姐&qu ...

最新文章

  1. UIWebView、WKWebView使用详解及性能分析
  2. 如何防止果照外泄?自己先上传就OK!扎克伯格这波操作给网友整不会了
  3. cisco pix防火墙命令使用
  4. MTK 8127平台使用busybox
  5. 信息学奥赛C++语言:最大数max(x,y,z)
  6. 包的实际操作 java
  7. 录像回放丨2020数据技术嘉年华现场视频现已上线
  8. XP下如何引导Vista
  9. html默认图片,web前端之网页中几种默认图片的解决方式
  10. Node.js入门(含NVM、NPM、NVM的安装)-(转载)
  11. 砍价小程序怎么变成二维码(小程序码)
  12. Paraview源码解析2:vtkArrowGlyphFilter类
  13. html页面设计扁平化,35个扁平化网站设计灵感
  14. sqlserver日期减一天_第二人立减1000 | 去厦门吃的地道精彩不重样,没有比这更“惠”吃了!...
  15. sigma-delta_Delta调试-简化失败的测试用例
  16. 鸿蒙初判陶镕铁,大禹治水为何还要求雨?他用金箍棒到底做什么用?
  17. DM36x 接入 AR0130 sensor
  18. 国际短信平台接口调用的方法步骤,简单5步快速教程
  19. 矩阵的三角分解(LU分解)
  20. 睡眠键重启计算机,Windows10进入睡眠模式后按任意键会自动重启怎么办

热门文章

  1. 【apt】The following signatures couldn‘t be verified because the public key is not available
  2. 程序员的进化,Python程序员是最大的亮点
  3. 魔幻!过年在家,Java和Python程序员比工资打起来了...
  4. 汇编语言之课程设计一
  5. 划分,全概率公式,贝叶斯公式证明
  6. 国内主流物流公司常用快递单号查询API接口全攻略
  7. 保研之路——复旦计算机学院预推免
  8. 微信小程序制作——获取用户信息
  9. 模拟电路仿真LTspice(3):三极管共发射极放大电路
  10. CF1144C - Two Shuffled Sequences