鱼C论坛

 找回密码
 立即注册
查看: 1029|回复: 5

[已解决]爬图片素材失败

[复制链接]
发表于 2020-6-6 12:29:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import requests
from lxml import etree

class ImageSpider(object):
    def __init__(self):
        '''准备url'''
        self.first_url="https://www.51miz.com/so-sucai/1789243-13-0-0-default/p_{}/"
        self.headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"}

    '''发送请求  获取响应'''
    def get_page(self,url):
        res=requests.get(url=url,headers=self.headers)
        html=res.content.decode('utf-8')
        return html


    '''解析数据'''
    def parse_page(self,html):
        '''创建解析对象'''
        parse_html = etree.HTML(html)
        '''获取二级页面链接'''
        image_src_list = parse_html.xpath('//a[@class="image-box"]/@href')

        for image_src in image_src_list:
            print(image_src)
            html1=self.get_page(image_src)
            parse_html1=etree.HTML(html1)
            bimg_url = parse_html1.xpath('//img[@class="previewPic previewPic_0 previewPicSmall_0 show"]/@src')[0]
            filename = parse_html1.xpath('//div[@class="title fl lh28"]//h1[@class="iftip"]/text()')[0]
            dirname = "图片1/" + filename[1:] + '.jpg'
            html2 = requests.get(url="http:"+bimg_url, headers=self.headers).content
            with open(dirname,'wb') as f:
                f.write(html2)
                print("%s下载成功"%filename)

    def main(self):
        startPage=int(input("起始页:"))
        endPage=int(input("终止页:"))
        for page in range(startPage,endPage+1):
            url = self.first_url.format(page)
            html = self.get_page(url)
            #pprint(html)
            print(url,'aaaa')
            self.parse_page(html)

if __name__ == '__main__':
    imageSpider=ImageSpider()
    imageSpider.main()

要爬的网址是:https://www.51miz.com/
以“鼠年”图片为例,先在检索框检索“鼠年”,然后要爬的PNG类型的图片,如下图:

1591417646(1).jpg

报错信息如下:
1591417702(1).jpg
最佳答案
2020-6-6 12:48:50
jump_p 发表于 2020-6-6 12:31
那是文件夹的名字啊?我以为是在open里写的,可以自动创建

文件夹不会自动创建的
要么手动创建,要么os.mkdir
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-6 12:30:20 | 显示全部楼层
有图片1这个文件夹吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-6 12:31:42 | 显示全部楼层
qiuyouzhi 发表于 2020-6-6 12:30
有图片1这个文件夹吗?

那是文件夹的名字啊?我以为是在open里写的,可以自动创建
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-6 12:48:50 | 显示全部楼层    本楼为最佳答案   
jump_p 发表于 2020-6-6 12:31
那是文件夹的名字啊?我以为是在open里写的,可以自动创建

文件夹不会自动创建的
要么手动创建,要么os.mkdir
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-6 13:21:37 | 显示全部楼层
本帖最后由 xiaosi4081 于 2020-6-6 13:27 编辑
import requests
from lxml import etree
import os
if not os.path.exists('图片1'):
    os.mkdir('图片1')
class ImageSpider(object):
    def __init__(self):
        '''准备url'''
        self.first_url="https://www.51miz.com/so-sucai/1789243-13-0-0-default/p_{}/"
        self.headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"}

    '''发送请求  获取响应'''
    def get_page(self,url):
        res=requests.get(url=url,headers=self.headers)
        html=res.content.decode('utf-8')
        return html


    '''解析数据'''
    def parse_page(self,html):
        '''创建解析对象'''
        parse_html = etree.HTML(html)
        '''获取二级页面链接'''
        image_src_list = parse_html.xpath('//a[@class="image-box"]/@href')

        for image_src in image_src_list:
            print(image_src)
            html1=self.get_page(image_src)
            parse_html1=etree.HTML(html1)
            bimg_url = parse_html1.xpath('//img[@class="previewPic previewPic_0 previewPicSmall_0 show"]/@src')[0]
            filename = parse_html1.xpath('//div[@class="title fl lh28"]//h1[@class="iftip"]/text()')[0]
            dirname = "图片1/" + filename[1:] + '.jpg'
            html2 = requests.get(url="http:"+bimg_url, headers=self.headers).content
            with open(dirname,'wb') as f:
                f.write(html2)
                print("%s下载成功"%filename)

    def main(self):
        startPage=int(input("起始页:"))
        endPage=int(input("终止页:"))
        for page in range(startPage,endPage+1):
            url = self.first_url.format(page)
            html = self.get_page(url)
            #pprint(html)
            print(url,'aaaa')
            self.parse_page(html)

if __name__ == '__main__':
    imageSpider=ImageSpider()
    imageSpider.main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-6 13:31:48 | 显示全部楼层

感谢!不过楼上先回答了,这次先给他最佳了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 20:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表