最近小组在做深度学习的课设,需要一些数据集,由于直接用关键词搜出来的图片会混入一些奇怪的图片,为了使数据集更准确,用上了bd的以图搜图功能。
打开以后是一个动态加载的网页,按F12打开调试工具DevTools。
选择Network下的XHR(XMLHttpRequest),过滤AJAX请求。
刷新一下网页,下拉滚动条让它抓包。
在Name中找到图中框处来的请求, 在Preview里可以看到有一个list装着我们想要的图片。
在文末的代码中替换掉sign、sids和logid字段的值,运行程序。
爬取到414张图片,下载保存在本地的路径需要自己改。
可以看到已经成功下载啦!
写的比较简单,主要是教程,有空再写一下原理。
import requests
import os
def getManyPages():
params=[]
for i in range(1,20,1):
params.append({
'sign': '**********',
"srcp": "crs_pc_similar",
"tn": "pc",
"idctag": "gz",
"sids": "*********",
"logid": "*********",
"promotion_name": "pc_image_shitulist",
'tpl_from': "pc",
"page": i
})
url = 'https://graph.baidu.com/ajax/pcsimi'
urls = []
urlsSet = set()
count=1
for i in params:
u1=requests.get(url,params=i).json().get('data').get('list')
for j in u1:
u2=j.get('thumbUrl')
#print('['+str(i)+']',end='')
print("["+str(count)+"]",end="")
print(u2)
urls.append(u2)
urlsSet.add(u2)
count=count+1
print(urlsSet)
print(len(urlsSet))
return urlsSet
def getImg(dataList, localPath):
if not os.path.exists(localPath): # 新建文件夹
os.mkdir(localPath)
x = 0
for i in dataList:
if i != None:
print('正在下载:%s' % i)
ir = requests.get(i)
open(localPath + '%d.jpg' % x, 'wb').write(ir.content)
x += 1
else:
print('图片链接不存在')
if __name__ == '__main__':
dataList = getManyPages() # 参数1:关键字,参数2:要下载的页数
getImg(dataList,'D:/pythonProject/shitu/梨2/') # 参数2:指定保存的路径
参考了下面这篇文章,感谢!
python学习(7):python爬虫之爬取动态加载的图片,以百度图片为例_欢迎来到Jimmy的博客-CSDN博客