import requests,re,time,os
from lxml import etree
#定义要爬取的页数
for page in range(9,10):
    # 先定义一个图片保存的路径
    path = fr'C:\Users\wxzhanghs\Desktop\必应\第{page}页'
    # 判断路径是否存在,如果不存在则创建一个,存在则忽略
    folder = os.path.exists(path)
    if not folder:
        folder = os.mkdir(path)
    else:
        pass
    #第一页的网址是不带参数的
    if page == 1:
        url = 'https://bing.ioliu.cn'
    #后面所有页码的网址都要加一个页码的参数
    else:
        url = f'https://bing.ioliu.cn/?p={page}'
    #加入请求头,模拟浏览器发起请求,防止被反扒
    user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.170 Safari/537.36'
    header = { 'user-agent':user_agent}
    req = requests.get(url=url,headers=header)
    #转换返回的html网页
    str1 = etree.HTML(req.content)
    urls = str1.xpath('//img/@src')
    names = str1.xpath('//h3/text()')
    #定义一个图片编号
    imgnum = 1
    #同时遍历图片url和name列表
    for (imgurl,imgname) in zip(urls,names):
        # 直接获取图片分辨率很小,要替换成电脑屏幕的分辨率
        imgurl1 = imgurl.replace('640x480', '1920x1080')
        # 剔除图片描述中不需要的内容
        imgname1 = imgname.split('(')[0]
        #获取图片
        img = requests.get(url=imgurl1, headers=header).content
        #写入建好的文件夹中,因为有的文件名没有括号,所以会报错,这种情况下跳过
        #无论失败还是成功都更新图片编号
        try:
            with open(path+f'\\{imgname1}.jpg'.format(imgnum),'wb') as f:
                f.write(img)
            print(f'获取第{page}页第{imgnum}张图片成功')
            imgnum += 1
        except FileNotFoundError:
            print(f'获取第{page}页第{imgnum}张图片失败')
            imgnum+=1
    #在每页爬取完后,等待2秒,防止被禁
    time.sleep(2)








  

本文地址:https://blog.csdn.net/weixin_44746955/article/details/110877539