python抓取图片

   python网络爬虫这学期才开设的课程,我觉得越接触就觉得越是很神奇,曾经的我没想到我会接触到这样的课程。因为我高中是学习文科的,对政史这样的文字学科比较感兴趣,高中我是知道编程的,但仅仅只是知道,也不深入了解,就只是在看电视的时候会觉得编程语言好酷,没想到大学的我居然误打误撞选了编程的一门相关专业。

  可能未来的我不会从事这门专业,但是依然不妨碍我对它的喜欢,它让我觉得计算机很神奇,很有趣,并且具有一定的挑战性,既然我接触到了它,那我希望我可以尽自己的所能获取一定的编程知识。

  python抓取图片主要是动态网页的图片,这需要用到python的相关第三方库,如requests等,在抓取某东西时,一定要注意抓包(XHR),获取真实的URL,下面是我的课下实践,主要是图片的抓取。

import requests
import time
import pprint
url=("https://image.baidu.com/search/acjson?tn=resultjson_com&logid=8539253244283893905&ipn=rj&ct=201326592&is"
     "=&fp=result&fr=ala&word=%E8%8D%89%E5%8E%9F%E5%9B%BE%E7%89%87&queryWord=%E8%8D%89%E5%8E%9F%E5%9B%BE%E7%89%87&cl="
     "2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc"
     "=&expermode=&nojc=&isAsync=&pn=30&rn=30&gsm=1e&1717159589930=")
headers={
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari"
}
response=requests.get(url,headers=headers)
response.encoding='utf-8'
datas=response.json()
#pprint.pprint(datas)
count=0  #count=1
for picture in datas['data']:
    title=picture.get('fromPageTitleEnc')
    cover=picture.get('middleURL')        #Invalid argument:无效参数
    cover_response=requests.get(cover,headers=headers)
    with open (f"D:\\python数据采集\\python爬虫\\图片爬取\\百度图片\\{count}.{title}.jpg","wb") as f:
        f.write(cover_response.content)
        count += 1
    time.sleep(2)
    print(f"第{count}张图片下载成功")

上述代码是我的课下实践,让我们来运行一下:

可以看到图片在正常下载,接下来让我们看看保存在文件夹中的图片:

这样我们的图片就成功保存在我们的文件夹中了。

上面的代码我没有加入排错程序,为了程序的有效运行,我们也可以把它加上,看如下代码:

import requests
import pprint
import time

url="https://spa5.scrape.center/api/book/?limit=18&offset=0"
headers={
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari"
}
response=requests.get(url,headers=headers)
response.encoding="utf-8"
data=response.json()

count=1
print(f"该页一共有{len(data['results'])}张图片")
print("开始下载图片")

for item in data['results']:
    title=item.get('name')
    cover=item.get('cover')
    print(f"第{count}张图片的链接为:",cover)

    try:
        cover_response=requests.get(cover,headers=headers)   #重点语句,相当于一个转换
    except:
        print(f"连接超时,第{count}张图片下载失败")
        countiue
    else:
        if cover_response.status_code == 200:
            #with open(f"D:\\python数据采集\\python爬虫\\scrape图片\\{count}.{title}.jpg","wb") as f:
            #写法一,,有“f”才会把图片逐一地保存下来,没有“f”图片会持续的跳转,并且图片命名就只是{count).{title}
            with open(f"./scrape_pic/{count}.{title}.jpg","wb")as f:
            #写法二 注意:必须在当前目录下创建一个文件,即“scrape_pic”
            #有“f”才会把图片逐一地保存下来,没有“f”图片会持续的跳转, 并且图片命名就只是{count).{title}
                f.write(cover_response.content)
                print(f"第{count}张图片下载成功")
                count += 1
        else:
            print(f"第{count}张图片下载失败,错误代码:{cover_response.status_code}")
    time.sleep(2)
print("下载完成")

这个代码就更完整一点,并且我写了相应的注释,方便我这样的小白能够看懂读懂反复记忆。

导入的pprint库是让json格式的文件打印出来格式化,方便看懂的,上边代码没用到,但也没影响。

导入的time库是设置延缓时间,让图片下载有个缓冲时间。

路过的大神如果发现有什么错误的话请多多指教。

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值