【百度爬虫系列 I】多关键字图片搜索结果汇总
2017-11-12 19:49
1111 查看
源码和结果:https://github.com/luyishisi/Anti-Anti-Spider/tree/master/11.%E7%99%BE%E5%BA%A6%E7%88%AC%E8%99%AB%E7%B3%BB%E5%88%97
相关文章
【百度系列 I】多关键字图片搜索结果汇总
【百度系列 II】关键字搜索url结果汇总(给定关键字和页数)
【百度系列 III】深度搜索(给定网址采集全部url)
1. 模拟百度图片输入关键字,获取结果。
2. 将搜索的结果图片(先保存600张)保存在文件夹中,以下面格式“关键字_n.jpg”(n取1,2,3,4,…..)
解析获取的html文本,获取图片url集合。
做着的时候发现果然百度的图片不是辣么简单的。(貌似有点复杂)
图一
图二
分析同一关键字的不同请求的url变化(copy link adress)。
图三
从上面我们可以大致的猜想一下:除去相同的字段,我们可以找到四个不同的字段。
大概是:
queryWord = “xx” : 输入的关键词
pn=30, pn=60 : 在获取结果中我们可以发现,要查看更多的图片,需要下拉,很有可能就是通过pn控制的。
rn=30 : 两次都没有改变,大概是每页30张照片。
&gsm=3c&1510487919192=:暂时不太清楚,而且发生变化了,先去掉。
有了以上的猜测如何获取根据图片请求的url获取图片的url集合,先分析图一4中Preview中的参数(Network中的Preview是发送请求后,从服务器端返回web前端发送一段json数据,有点乱码,可以复制到https://www.bejson.com/这里,点击校验,会自动回复json格式),如下所示:
下面是从这段json中获取图片的url,我们首先发现”thumbURL”和”middleURL”(一样的),复制后面的url到浏览器,果然显示出来了照片,说明我们以上的猜测是正确的。
将集合中的url存入urls.txt中。
逐行读取urls.txt,通过requests发送请求将返回的图片通过二进制方法存入文件夹中。
相关文章
【百度系列 I】多关键字图片搜索结果汇总
【百度系列 II】关键字搜索url结果汇总(给定关键字和页数)
【百度系列 III】深度搜索(给定网址采集全部url)
需求
批量自动化采集百度图片。1. 模拟百度图片输入关键字,获取结果。
2. 将搜索的结果图片(先保存600张)保存在文件夹中,以下面格式“关键字_n.jpg”(n取1,2,3,4,…..)
思路
方法一
通过requests请求url。解析获取的html文本,获取图片url集合。
做着的时候发现果然百度的图片不是辣么简单的。(貌似有点复杂)
图一
方法二
利用强大的Chrome浏览器的开发者工具(F12)分析百度图片时如何处理请求的。图二
分析同一关键字的不同请求的url变化(copy link adress)。
图三
从上面我们可以大致的猜想一下:除去相同的字段,我们可以找到四个不同的字段。
大概是:
queryWord = “xx” : 输入的关键词
pn=30, pn=60 : 在获取结果中我们可以发现,要查看更多的图片,需要下拉,很有可能就是通过pn控制的。
rn=30 : 两次都没有改变,大概是每页30张照片。
&gsm=3c&1510487919192=:暂时不太清楚,而且发生变化了,先去掉。
有了以上的猜测如何获取根据图片请求的url获取图片的url集合,先分析图一4中Preview中的参数(Network中的Preview是发送请求后,从服务器端返回web前端发送一段json数据,有点乱码,可以复制到https://www.bejson.com/这里,点击校验,会自动回复json格式),如下所示:
下面是从这段json中获取图片的url,我们首先发现”thumbURL”和”middleURL”(一样的),复制后面的url到浏览器,果然显示出来了照片,说明我们以上的猜测是正确的。
编码
先获取600张图片的url放在集合中(避免重复)将集合中的url存入urls.txt中。
逐行读取urls.txt,通过requests发送请求将返回的图片通过二进制方法存入文件夹中。
# -*- coding:utf-8 -*- import requests,json #os : ubuntu16.04 #python: python2 """ 获取图片的所有urls,存入set集合中去重,存在urls.txt中 """ def get_urls(key,sum): #请求头 url = "https://image.baidu.com/search/index" headers = { 'cookie': "td_cookie=2373937907; BDqhfp=%E6%B5%B7%E8%BE%B9%26%260-10-1undefined%26%260%26%261; BAIDUID=E26F8B2E16E037DF58FED1FDEAD8A636:FG=1; BIDUPSID=E26F8B2E16E037DF58FED1FDEAD8A636; PSTM=1506000312; pgv_pvi=229598208; td_cookie=2463294905; BDRCVFR[X_XKQks0S63]=mk3SLVN4HKm; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm; firstShowTip=1; indexPageSugList=%5B%22%E6%B5%B7%E8%BE%B9%22%2C%22%E6%B5%B7%E5%B2%B8%22%5D; cleanHistoryStatus=0; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm; userFrom=null", 'accept-encoding': "gzip, deflate, br", 'accept-language': "zh-CN,zh;q=0.8", 'user-agent': "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36", 'accept': "text/plain, */*; q=0.01", 'referer': "https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111111&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E6%B5%B7%E8%BE%B9&oq=%E6%B5%B7%E8%BE%B9&rsp=-1", 'x-requested-with': "XMLHttpRequest", 'connection': "keep-alive", 'cache-control': "no-cache", 'postman-token': "c1717c49-7d6f-b452-0005-026e525e7b43" } #pn控制页数 pn = 0 n = 0 pages = 1 flag = True s = set() #循环获取url for pn in range(0,21): print "pn=" + str(pn*30) url = "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=" + key + "&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&word=" + key + "&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&pn=" + str(pn*30) + "&rn=30" #url = "http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&fp=result&queryWord={key}&cl=2&lm=-1&ie=utf-8&oe=utf-8&st=-1&ic=0&word={key}&face=0&istype=2nc=1&pn={pn}&rn=60" #url = "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord="+key+"&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&word=%E6%B5%B7%E8%BE%B9&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&pn="+str(pn*30)+"&rn=30" #print url r = requests.get(url,headers=headers).text.encode("utf-8") try: dictinfo = json.loads(r) #每页30张 for i in range(0,30): #print i if n == sum: flag = False else: temp = dictinfo["data"][i]["thumbURL"] n = n + 1 s.add(str(temp)+"\n") except: print "请求发送失败重试" print len(s) f = open("urls.txt","w") for url in s: f.write(url) f.close() print "get_urls 完成" #将图片写在pic文件夹 def write_pics(SavePath,sum): f = open("./urls.txt","r") m = 1 for url in f: Path = SavePath + str(m) +".jpg" f1 = open(Path,"wb") r = requests.get(url) f1.write(r.content) #print m m = m + 1 f1.close() print "write_pics 完成" def get_class(name): name = name.split("|") print len(name) for index in range(0,len(name)): print "mingzi=" + name[index] SavePath = "./snow/"+ str(name[index]) + "_" print SavePath get_urls(name[index], sum) write_pics(SavePath,sum) print "a" if __name__=="__main__": sea = "海边|海岸|沿海" tree = "山林|树林|森林" road = "公路|道路|小路|马路" snow ="雪景|雪地|冬天景色" town ="小镇|小镇风光|小镇建筑风景" sum = 600 get_class(snow)
运行结果
相关文章推荐
- 【百度爬虫系列 II】关键字搜索url结果汇总(给定关键字和页数)
- Python根据关键字百度搜索下载图片
- 简单的抓取淘宝关键字信息、图片的Python爬虫|Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第二篇)
- JQuery+JS实现仿百度搜索结果中关键字变色效果
- 【百度爬虫系列 III】深度搜索(给定网址采集全部url)
- 截图留念,“万能数据库查询分析器”作为关键字在百度和谷歌上的海量搜索结果
- 百度搜索结果爬虫
- JQuery+JS实现仿百度搜索结果中关键字变色效果
- JQuery+JS实现仿百度搜索结果中关键字变色效果
- 截图留念,“万能数据库查询分析器”作为关键字在百度和谷歌上的海量搜索结果
- 像百度搜索结果一样得到一个关键字左右的若干字符
- 【爬虫】爬取百度搜索结果页面
- Python爬虫爬取百度搜索结果——邮箱地址
- 如何才能在百度搜索结果中出现图片
- C++和python如何获取百度搜索结果页面下信息对应的真实链接(百度搜索爬虫,可指定页数)
- python爬虫(11)身边的搜索专家——获取百度搜索结果
- 搜索、关键字-截图留念,“万能数据库查询分析器”作为关键字在百度和谷歌上的海量搜索结果-by小雨
- 网页爬虫进阶系列之百度地图搜索结果列表爬虫制作
- 百度搜索结果升级 显示嵌入图片
- 百度与google的搜索结果比较:汇总 翻译