爬取搜狗图片实践,最后附源码

204 阅读1分钟

爬取搜狗图片实践,最后附源码

** 最近在用python写爬虫,看上了搜狗图片,话不多说,开始把,最开始是想用解析html标签,利用xpath,或者正则提取图片url信息,但是模拟请求发现返回的html中找不到图片标签信息,猜测可能这些img是通过js动态生成的,于是只能换一种方法,打开f12控制台**

360截图20231203104258757.jpg

发现searchlist这个请求应该和图片相关,查看其请求头

360截图20231203104430971.jpgpic.sogou.com/napi/pc/sea… 分析这个html结构发现start是请求图片起始位置,第一个加载为0,xml_len为一次查询长度默认为48,query为查询关键词,最后在查看这个请求的响应。

360截图20231203104913643.jpg 看到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即可。 360截图20231203105541875.jpg