竹里清风,竹外尘 2019-08-03 11:41 采纳率: 25%
浏览 1783
已采纳

python爬虫爬取斗图啦上的图片,打开爬取的图片显示图片错误

图片说明



import requests,re,os
from bs4 import BeautifulSoup


def get_url(url):
    headers={
        'User_Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
        'Referrer':url
    }
    res = requests.get(url,headers=headers)
    text = res.text
    soup = BeautifulSoup(text,'lxml')
    divs = soup.find('div',class_='page-content text-center')
    a_s = divs.find_all('a',attrs={'class': 'col-xs-6 col-sm-3'})
    for a in a_s:
        #print(a)
        herf = a['href']
        img = a.find('img')
        print(img)
        #获取最内层标签方法如下
        if a.img['class']==['gif']:
            pass

        else:
            alt = a.img['alt']
            alt = re.sub(r'[,@??!!:。]','',alt)
            #print(alt)
            data = a.img['data-original']
            print(data)
            datastr = '.'+data.split('.')[-1]

            filename = alt + datastr
            #print(filename)
            #print(os.getcwd())

            if os.path.exists(os.getcwd() + "\斗图啦\\"+filename):
                print('文件已经存在')
            else:

                filename = os.getcwd() + "\斗图啦\\"+filename

                print(filename)
                with open(filename,'w') as fp:
                   fp.write(data)



def main():
    if os.path.exists(os.getcwd()+'\斗图啦\\'):
        print('文件夹已存在')
    else:
        os.mkdir(os.getcwd() + "\斗图啦\\")

    #for x in range(1,101):
     #   url = 'http://www.doutula.com/photo/list/?page=%d' %x
      #  get_url(url)

    url = 'http://www.doutula.com/photo/list/?page=1'
    get_url(url)

if __name__ == '__main__':
            main()

  • 写回答

3条回答 默认 最新

  • 竹里清风,竹外尘 2019-08-03 13:28
    关注

    已经解决,data-origina属性是一个网址,所以在这里要再requests.get(data).content这样才是图片内容。图片应该以二进制方式储存,所以应该以wb模式写入

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 网络科学导论,网络控制
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)