专栏首页浅枫沐雪scrapy爬取搜狗图片

scrapy爬取搜狗图片

# -*- coding: utf-8 -*-
from urllib.parse import urlencode
import json
import scrapy
import os
import re
import urllib.request

class SougouimgSpider(scrapy.Spider):
    name = 'sougouimg'
    allowed_domains = ['pic.sogou.com']
    start_urls = ['https://pic.sogou.com/']

    def parse(self, response):
        page = 1
        endpage = 5     # 终点页
        keywords = r'哆啦A梦'
        for page in range(1,endpage):
            yield scrapy.Request(self.geturl(keywords,page), callback=self.sougou)



    def sougou(self,response):
        # 获取get参数
        # print(response.text)
        data = response.text
        js = json.loads(data)
        for list in js['items']:
            img_url = list['pic_url']
            self.savve(img_url)

    def geturl(self, keywords, page):     # 传入关键字,页码
        param = {
            'query': keywords,
            'mode': '1',
            'start': page*48,
            'reqType': 'ajax',
            'reqFrom': 'result',
            'tn': '0'
        }

        ps = urlencode(param)
        url = 'https://pic.sogou.com/pics?' + ps
        return url

    def savve(self,img_url):
        path = os.path.dirname(os.path.abspath(__file__))+"\\搜狗图片"

        dir = os.path.exists(path)

        if not dir:
            os.makedirs(path)
        reg = re.compile('[^\/]+$')
        # 保存图片
        title= reg.findall(img_url)[0]
        sougou = path + "\\" + title
        try:
            urllib.request.urlretrieve(img_url, sougou)
        except Exception as e:
            print(title+"下载失败")
        finally:
            print(title+"下载完毕")

by浅枫沐雪

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • mysql备份与恢复

      MySQL数据库自带的一个很好用的备份命令。是逻辑备份,导出 的是SQL语句。也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备份的文件的...

    链上世界
  • Maven入门手记

    链上世界
  • 文章notice与毫秒级建站时间

    首先,将以下js添加到主题,你可以添加到自己的js文件,也可以添加到footer.php文件中。添加的js文件中,直接添加即可。添加到footer.php,需要...

    链上世界
  • Python第四个项目:爬取简书任意一篇文章里所有图片(通用)

    王小婷
  • 面向对象编程进阶

    通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过...

    hankleo
  • pygame-KidsCanCode系列jumpy-part14-背景音乐及音效

    没有音乐和音效的游戏是没有灵魂的,这回讲解如何处理背景音乐及跳跃音效。加载music及sound的方法,之前已经写过,见:pygame 笔记-8 背景音乐&子弹...

    菩提树下的杨过
  • maven web工程缺少 src/main/java 和 src/test/java 资源文件夹的方法

    右键打开:build path -> configure build path...

    Krry
  • 由python端口转发脚本看asyncore模块

    asyncore, 端口转发, ...

    phith0n
  • Python3 面向对象

    类对象支持两种操作:属性引用和实例化。 属性引用语法:obj.name 对象创建后,类命名空间中所有的命名都是有效属性名

    py3study
  • day22-day27-面向对象

    少年包青菜

扫码关注云+社区

领取腾讯云代金券