【Ajax+】爬去今日头条图片
文章目录
- 使用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+】爬去今日头条图片相关推荐
- 分析Ajax爬取今日头条,下载图片
这几天打算趁着寒假时间把之前学的爬虫捡回来,发现现在今日头条改了一丢丢.与崔庆才老师有关分析Ajax爬取今日头条街拍美图已经有点出入. 获取搜索结果的ur的方法与崔庆才老师是一样的,这里就不细说了,不 ...
- 爬取今日头条图片(解决缩略图问题+MySQL)
爬取今日头条图片 1. 引言 2. 分析 2.1 获取主页的url 2.2 获取当前页所有文章的链接 2.3 具体文章的信息 2.4 MySQL设置 3.代码 4. 效果 4.1 本地效果图 4.2 ...
- [Python3网络爬虫开发实战] --分析Ajax爬取今日头条街拍美图
[Python3网络爬虫开发实战] --分析Ajax爬取今日头条街拍美图 学习笔记--爬取今日头条街拍美图 准备工作 抓取分析 实战演练 学习笔记–爬取今日头条街拍美图 尝试通过分析Ajax请求来抓取 ...
- 利用Ajax爬取今日头条头像,街拍图片。关于崔庆才python爬虫爬取今日头条街拍内容遇到的问题的解决办法。
我也是初学爬虫,在看到崔庆才大佬的爬虫实战:爬取今日头条街拍美图时,发现有些内容过于陈旧运行程序时已经报错,网页的源代码早已不一样了.以下是我遇到的一些问题. 1.用开发者选项筛选Ajax文件时预览看 ...
- 简单爬虫Ajax数据爬取——今日头条图片爬取
一.Ajax简介 什么是Ajax? Ajax 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创建交互式网页 ...
- 爬虫(4)-使用Ajax爬取今日头条表情包图片
文章目录 爬取今日头条表情包图片 1.获取信息 2.代码 改进 认为有用的话请点赞,码字不易,谢谢. 其他爬虫实战请查看:https://blog.csdn.net/qq_42754919/categ ...
- [爬虫笔记01] Ajax爬取今日头条文章
1.爬取分析 我们首先打开今日头条,搜索"罗志祥" 打开浏览器的开发者工具,红色框中就是我们请求到的数据 将搜索界面的滚动条滑到底,在开发者工具中就可以看到所有请求到的数据,加上前 ...
- Ajax爬取今日头条
今日头条爬取街拍图 (动态页面抓取逆向解析实例) 链接:https://www.toutiao.com/ 目标:爬取今日头条街拍图高清图集 目标网站分析: (索引页分析) 1.进入页面,滑下鼠标,发现 ...
- 如何爬取今日头条图片
本文为项目的练习之一.项目来源网页 https://www.cnblogs.com/qun542110741/p/9145286.html ,项目要求为爬取今日头条搜索关键词为"小姐姐&qu ...
最新文章
- UIWebView、WKWebView使用详解及性能分析
- 如何防止果照外泄?自己先上传就OK!扎克伯格这波操作给网友整不会了
- cisco pix防火墙命令使用
- MTK 8127平台使用busybox
- 信息学奥赛C++语言:最大数max(x,y,z)
- 包的实际操作 java
- 录像回放丨2020数据技术嘉年华现场视频现已上线
- XP下如何引导Vista
- html默认图片,web前端之网页中几种默认图片的解决方式
- Node.js入门(含NVM、NPM、NVM的安装)-(转载)
- 砍价小程序怎么变成二维码(小程序码)
- Paraview源码解析2:vtkArrowGlyphFilter类
- html页面设计扁平化,35个扁平化网站设计灵感
- sqlserver日期减一天_第二人立减1000 | 去厦门吃的地道精彩不重样,没有比这更“惠”吃了!...
- sigma-delta_Delta调试-简化失败的测试用例
- 鸿蒙初判陶镕铁,大禹治水为何还要求雨?他用金箍棒到底做什么用?
- DM36x 接入 AR0130 sensor
- 国际短信平台接口调用的方法步骤,简单5步快速教程
- 矩阵的三角分解(LU分解)
- 睡眠键重启计算机,Windows10进入睡眠模式后按任意键会自动重启怎么办
热门文章
- 【apt】The following signatures couldn‘t be verified because the public key is not available
- 程序员的进化,Python程序员是最大的亮点
- 魔幻!过年在家,Java和Python程序员比工资打起来了...
- 汇编语言之课程设计一
- 划分,全概率公式,贝叶斯公式证明
- 国内主流物流公司常用快递单号查询API接口全攻略
- 保研之路——复旦计算机学院预推免
- 微信小程序制作——获取用户信息
- 模拟电路仿真LTspice(3):三极管共发射极放大电路
- CF1144C - Two Shuffled Sequences