爬取搜狗图片实践,最后附源码
** 最近在用python写爬虫,看上了搜狗图片,话不多说,开始把,最开始是想用解析html标签,利用xpath,或者正则提取图片url信息,但是模拟请求发现返回的html中找不到图片标签信息,猜测可能这些img是通过js动态生成的,于是只能换一种方法,打开f12控制台**
发现searchlist这个请求应该和图片相关,查看其请求头
“pic.sogou.com/napi/pc/sea…
分析这个html结构发现start是请求图片起始位置,第一个加载为0,xml_len为一次查询长度默认为48,query为查询关键词,最后在查看这个请求的响应。
看到thumbUrl这个就是图片地址了,分析到这一步就可以开始写代码了
import json
from urllib import parse
import os
class SougoSpider(object):
def __init__(self):
self.url='https://pic.sogou.com/napi/pc/searchList?mode=1&start={}&xml_len=48&query={}'
self.start = 0
#图片存放位置
self.path = 'D:/Pictures/{}'
self.i = 1
self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/537.36'}
def getimgurl(self):
query = input('您要搜索的图片关键词:')
res = requests.get(self.url.format(self.start,query),headers=self.headers)
res_content = json.loads(res.text)
# print(res_content)
# 创建文件夹
directory = self.path.format(query)
if not os.path.exists(directory):
os.makedirs(directory)
# 获取图片json数据
img_items = res_content['data']['items']
# print(img_items)
for i in img_items:
# print(i['thumbUrl'],i['title'])
filename = '{}/{}_{}.jpg'.format(directory,query,self.i)
self.i += 1
self.saveimg(filename,i['thumbUrl'])
def saveimg(self,filename,url):
img = requests.get(url).content
with open(filename,'wb') as f:
print('{}下载成功'.format(filename))
f.write(img)
if __name__ == '__main__':
spider = SougoSpider()
spider.getimgurl()
最后附上运行结果,如果想爬取更多图片,在getimgurl中的for循环中进行递归即可,当每爬取48张图片构建一个新的url即可。