抓取异步数据(AJAX)

  • 数据在XHR中
  • 提取结果
  • 完整代码
  • 注意事项

数据在XHR中

可以看到,单击XHR按钮后,左侧的列表只显示了一个名为data的URL,很明显,这是获取数据的路由名字,在右侧的Preview选项卡中显示了data返回的数据,很显然,这是ISON格式的数字器,其实现在已经完成了任务,找到了异步访问的 URL, 并且了解了返回的数据格式。那么很多读者会问,XHR是什么呢?XHR是XMLHupRe quest的缩写,用于过渡通过异步方式请求的URL,

提取结果

知道了异步请求的URL,就可以通过requests等网络库通过URL抓取数据,不过返回的数据格式不是 HTM L,也不是XML,而是 。JSON。所以不能使用XPath和CSS选择器处理,而是使用json模块中的loads函数将字符串形式的JSON转换为Python字典。

result = requests.get('https://...)json_str = result.contentjson_doc = str(json_str,'utf-8')#将结果转换为JSON对象,这里要先获得二进制形式,然后用UTF-8转码,不能直接用 result.text#属性,否则有乱码imageResult = json.loads(json_doc)# 获取data 的值data = imageResult['data']# 迭代获取其中的URLfor record in data:url = record.get('middleURL')

完整代码

import requests
import json
import random
import string
import osheaders = {'Host': 'image.baidu.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
'Cookie': 'ab_sr=1.0.1_MWZjNmQ4NWI0NzM1NTAzMzcxODUzZDhjYjRhNjQwNjJjZDg5MzVmMzliY2VlMzdhZjJlZWRkYTg5YWE0NGQwMmVhNWFkMjgyZWM4NGE2MjI0NzExYTc5ZTRjOGQ3MWM0OWM3ZTVlOTE5NWY5ZmE0OWQxNjJiYWJiYzIwM2EyMjM0ODFlYzY4ODg2NTVmOTBkZDQ5MGYyOGNkNmRiN2FiYQ=='
}word = input('请输入搜索关键字: ')
print(word)dir_name = ''.join(random.sample(string.ascii_letters+string.digits,8))
print('图形保存在 ',dir_name,'目录中')os.mkdir(dir_name)max_value = 100current_index = 0image_index = 1
while current_index< max_value:result = requests.get('https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=false&word={}&step_word=&hs=0&pn={}&spn=0&di=83490&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=2&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=-1&cs=1026589627%2C4205865473&os=3675895651%2C583397198&simid=3355510967%2C144353084&adpicid=0&lpn=0&ln=1624&fr=&fmq=1629645388047_R&fm=&ic=0&s=undefined&hd=undefined&latest=undefined&copyright=undefined&se=&sme=&tab=0&width=&height=&face=undefined&ist=&jit=&cg=girl&bdtype=0&oriquery=&objurl=https%3A%2F%2Fss1.baidu.com%2F9vo3dSag_xI4khGko9WTAnF6hhy%2Fzhidao%2Fpic%2Fitem%2Fb03533fa828ba61e591043e94334970a314e597e.jpg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fzit1w5_z%26e3Bkwt17_z%26e3Bv54AzdH3Fq7jfpt5gAzdH3F80ndmcna8d8cnalacb0_z%26e3Bip4s&gsm=96&rpstart=0&rpnum=0&islist=&querylist=&nojc=undefined'.format(word,current_index))json_str = result.contentjson_doc = str(json_str,'utf-8')imageResult = json.loads(json_doc)data = imageResult['data']for record in data:url = record.get('middleURL')if url !=None:print('正在下载图片:,',url)r = requests.get(url,headers = headers)filename = dir_name+'/'+str(image_index).zfill(10)+".png"with open(filename,'wb') as f:f.write(r.content)image_index +=1current_index +=30print('图片下载完成')

注意事项

  • 主页的代码是从HXR 的Header中得到的
  • 记住要get的headers参数一般都要放Cookie才可以
  • allow_redirects=False :是避免重点向过多报错。

抓取异步数据(AJAX)笔记相关推荐

  1. Wireshark学习笔记——如何快速抓取HTTP数据包

    0.前言 在火狐浏览器和谷歌浏览器中可以非常方便的调试network(抓取HTTP数据包),但是在360系列浏览器(兼容模式或IE标准模式)中抓取HTTP数据包就不那么那么方便了.虽然也可使用Http ...

  2. Colly 学习笔记(二)——爬虫框架,抓取下载数据(上证A股数据下载)

    Colly 学习笔记(二)--爬虫框架,抓取下载数据(上证A股数据下载) Colly 学习笔记(一)--爬虫框架,抓取中金公司行业市盈率数据 Colly 学习笔记(二)--爬虫框架,抓取下载数据(上证 ...

  3. Python 爬虫篇#笔记02# | 网页请求原理 和 抓取网页数据

    目录 一. 网页请求原理 1.1 浏览网页的过程 1.2 统一资源定位符URL 1.3 计算机域名系统DNS 1.4 分析浏览器显示完整网页的过程 1.5 客户端THHP请求格式 1.6 服务端HTT ...

  4. 使用Scrapy,帮你快速抓取网页数据(代码可下载)!

    Scrapy 是一套基于基于Twisted的异步处理框架,纯python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网站数据.提取结构性数据以及各种图片,非常方便.Sc ...

  5. 四、小程序|App抓包(四)-Tcpdump抓取手机数据包分析

    小程序|App抓包(四) Tcpdump抓取手机数据包分析 一.环境需求: 1.手机需要root 2.电脑上安装SDK(建议安装android studio)也可单独安装SDk也行 下载地址 : ht ...

  6. 爬虫入门(五)抓取网页数据

    前面已经实现了获取整个网页HTML的功能,并且在获取HTML的基础上,加上一些诸如:下载出错自动重试.用户代理.服务器代理.爬取深度.避免重爬.id遍历.链接遍历等进阶功能.而且在处理过程中也初步使用 ...

  7. 抓取网页数据并解析Android

    抓取网页数据并解析 标签: 网页抓取jsoupAndroid 2016-03-02 13:54 1262人阅读 评论(1) 收藏 举报  分类: Android开发(原创)(7)  版权声明:本文为博 ...

  8. Python爬虫抓取动态数据

    一个月前实习导师布置任务说通过网络爬虫获取深圳市气象局发布的降雨数据,网页如下: 心想,爬虫不太难的,当年跟zjb爬煎蛋网无(mei)聊(zi)图的时候,多么清高.由于接受任务后的一个月考试加作业一大 ...

  9. python3 爬虫抓取股市数据

    python3 爬虫抓取股市数据 爬虫抓取数据的一般步骤 代码 运行结果 小结 注意事项 爬虫抓取数据的一般步骤 1.确定需要抓取的网站2.分析url,找到url的的变化规律3.分析页面的数据4.获取 ...

最新文章

  1. 腾讯To B业务架构再升级,汤道生任云与智慧产业事业群CEO
  2. C++知识点12——构造函数初步
  3. a byte of python-《A Byte of Python》笔记
  4. 显示非模式窗口和模式窗口
  5. Java ArrayList和Vector、LinkedList与ArrayList、数组(Array)和列表集合(ArrayList)的区别...
  6. spring-security的初步应用
  7. 0_0 SimpleFactoryMode 简单工厂模式
  8. codis配置_codis 源码理解
  9. 面试题,你觉得什么样的产品适合做成saas?
  10. 项目管理学习总结(4)——项目团队,如何展开有效沟通?
  11. ROS的学习(十九)用rosserial创建一个subscriber
  12. python制作无限弹窗_Python无限弹窗,开机启动,打包为exe程序
  13. 登录瑞友天翼时提示“建立SSl 加密隧道失败,请检查网络连接是否正常或者服务器的协议端口是否正常”,如何处理?...
  14. 大佬们用代码写的故事
  15. java读写xlsx文件
  16. Mac必备软件之程序员、设计师、产品经理
  17. Rancher Labs获2500万美元C轮融资
  18. Salesforce中国区或将解散?国产SaaS如何在竞争中扬长避短
  19. 故宫买票显示服务器开小差,比春运车票还难抢的故宫灯会 预约系统直接崩溃...
  20. ubuntu 1204 server xp 硬盘安装

热门文章

  1. 我的计算机怎么打不开怎么办理,我的电脑打不开,怎么办【解决方法】
  2. 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 3.)(python/c/c++版)(笔记)
  3. Intel Realsense D435 如何通过摄像头序列号重置hardware_reset()摄像头?
  4. tensorflow tf.data.Dataset.from_tensor_slices() (创建一个“数据集”,其元素是给定张量的切片)
  5. python 将PascalVOC(XML)格式的标注数据批量转换为YOLO(txt)格式的标注数据
  6. C++和Python,JSON文件的读取和保存
  7. dotnet安装包时找不到依赖关系_孩子总找妈妈,小心单方父母过渡依赖症,4个方法让父母更平等...
  8. python查询文件软件_Python小工具--多文件查找字符串fs
  9. 每天学一点儿shell:正则表达式
  10. Linux常见使用命令小结