使用python3爬去360图片

基于windows 下 使用python3读取  http://image.so.com/z?ch=beauty


第一步

    引入工具包

from retrying import  retry
import  requests
import urllib.request
import  json
import time

如果你的包 不能够导入成功  必须先去 安装对应的包


到python3的安装目录下  D:\dbase\python3\Scripts  打开cmd 使用pip 命令报错

 pip 命令如果报错    使用命令 pip install --upgrade pip   升级pip 在下载 retry requests 

pip install --upgrade pip  
pip  install  retrying 
pip  install requests

要想获取当前链接的图片     必须对其 进行分析   发现  http://image.so.com/z?ch=beauty

中是不包含图片数据的  不能通过当前链接进行 访问  通过f12 发现

http://image.so.com/zj?ch=beauty&sn=60&listtype=new&temp=1

中是含有  图片信息的json 数据   我们通过程序访问它是可以获取数据的

一次请求 可以获得30 条数据        通过 对sn的修改 我们可以获取到大量数据 进过测试 我发现sn 最大值没有超过 1500 

因此 我打算获取1200  条数据

在下载图片的过程中 可以出现问题   出现 连接超时的问题   导入retry    让它反复下载3 次  

代码

from retrying import  retry
import  requests
import urllib.request
import random
import  json
import time
#创建Img 类
class Img:
    def __init__(self):#初始化函数
        #我们将要访问的url        {}是用于接受参数的     当前一次 json 数据 有30 条  , 
        self.temp_url="http://image.so.com/zj?ch=beauty&sn={}&listtype=new&temp=1"
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36"
            , "Referer": "http://s.360.cn/0kee/a.html"
            , "Connection": "keep-alive"}
        self.num=0
    def get_img_list(self,url): # 获取 存放 图片url 的集合
        response = requests.get(url, headers=self.headers)
        html_str = response.content.decode()
        json_str = json.loads(html_str)
        img_str_list = json_str["list"]
        img_list = []
        for img_object in img_str_list:
            img_list.append(img_object["qhimg_url"])
        return  img_list

    def save_img_list(self,img_list):
        for img in img_list:
            self.save_img(img)

    @retry(stop_max_attempt_number=3)#当保存图片出现异常的时候  就需要用retry   进行回滚  , 再次 保存当前图片 stop_max_attempt_number   重试的次数
    def  save_img(self,img):#j对获取的 图片url进行下载 保存到本地
        f = open("D:\Temp\imges\\" + str(self.num) + ".jpg", "wb")
        f.write((urllib.request.urlopen(img)).read())
        # time.sleep(10)
        print(str(self.num) + "保存成功")
        self.num += 1
    def run(self):#实现主要逻辑
        total=1500
        while self.num<=total:
            #1获取链接
            url=self.temp_url.format(self.num)
            #获取数据
            img_list = self.get_img_list(url)
            #保存数据
            self.save_img_list(img_list)
            #不要获取数据过于频繁
            #time.sleep(60)
            print("先休息一会")
           

if __name__ == '__main__':
    img=Img()
    img.run()

程序运行效果 

  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值