吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1846|回复: 5
收起左侧

[已解决] 萌新刚接触爬虫,问一下这个代码有什么问题,爬出来的图片全是0字节

[复制链接]
人生苦短丶 发表于 2019-11-14 21:10
本帖最后由 人生苦短丶 于 2019-11-15 11:04 编辑

[Python] 纯文本查看 复制代码
import os
import requests
from lxml import etree
import time
import datetime
import urllib.request
import re
from fake_useragent import UserAgent
import random
# 添加的模块乱七八糟..


ua = UserAgent(verify_ssl=False)
headers = {
    'User-Agent': ua.random,

    'Referer': 'https://www.mzitu.com'
        }
def geturl(url, path):

    r = requests.get(url, headers=headers)
    dom = etree.HTML(r.content)

    href = dom.xpath('//ul[@id="pins"]/li/a/@href')

    for xurl in href:

        down(xurl, path)


def down(xurl, path):
    patten = re.compile(r'\d{6}')
    num = patten.search(xurl).group()
    header = headers
    header['Referer'] = "https://www.mzitu.com/" + num
    

    r = requests.get(xurl, headers=header)

    
    dom = etree.HTML(r.content)

    src = dom.xpath('//div[@class="main-image"]/p/a/img/@src')
    finalurl = src[0]
    title = dom.xpath('//div[@class="main-image"]/p/a/img/@alt')

    img = requests.get(finalurl)

    with open(path + '/' + str(title[0])+ '.jpg', 'wb') as f:
        f.write(img.content)
        f.close()
    print("%s下载成功" % title)
    time.sleep(2)

def main():
    print("1:性感妹子")
    print('*')
    print("2:日本妹子")
    print('*')
    print('3:台湾妹子')
    print('*')
    print('4:清纯妹子')
    print('-------------------------------------------------------------------------')
    a = int(input("请输入序列号(如:1):" ))

    url = "https://www.mzitu.com/"


    if a == 1:
        url = url + "xinggan"
    elif a == 2:
        url = url + "japan"
    elif a == 3:
        url = url + "taiwan"
    elif a == 4:
        url = url + "mm"
    else:
        print("您的输入有误,请重新输入")


    path = input("请输入要存放的地址(把要存放的文件夹直接拉进来):" )

    start_page = int(input("请输入下载的起始页码:"))
    end_page = int(input("请输入下载的终止页码:"))
    print("-----------------请稍等...")
    for page in range(start_page, end_page):
        url = url + "/" + "page" + "/" + str(page)
        a = datetime.datetime.now()
        print("开始下载第  %s  页的美图 " % page)

        geturl(url, path)
        b = datetime.datetime.now()
        print("用时   %s  " % str(b-a))





if __name__=='__main__':
    main()







    

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

别欺负我啊 发表于 2019-11-14 22:37
你直接去访问爬出来的图片地址,看看能不能读到图,不能的话网站应该有限制
于安安 发表于 2019-11-14 22:47
针对“下载抓取文件为空”的问题,按照以下方式排查
1.  检测本地保存文件是否有写权限
2.  代码中download中增加图片url打印,用浏览器方式确认合法
3.  打印图片url http请求返回报文,确认非 404等报错
4.  对比测试,图片访问是否存在cookie token等参数认证要求
cq5868177 发表于 2019-11-15 00:21
用你的代码跑了一下,发现ERR CODE403 请求,查看了一下请求,给你的代码加了几句就可以了,down函数里面的request.get 请求 headerss = {'Referer': 'https://www.mzitu.com/199055/2',
        'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'}
    #r = requests.get(finalurl, headers=headerss, timeout=30)
    try:
        r = requests.get(finalurl, headers=headerss, timeout=30)  用这样的就好了,Referer 是上一个页面的地址
 楼主| 人生苦短丶 发表于 2019-11-15 10:05
别欺负我啊 发表于 2019-11-14 22:37
你直接去访问爬出来的图片地址,看看能不能读到图,不能的话网站应该有限制

就是因为他的那个图片是要从上个网址访问进去才能出来
 楼主| 人生苦短丶 发表于 2019-11-15 11:03
cq5868177 发表于 2019-11-15 00:21
用你的代码跑了一下,发现ERR CODE403 请求,查看了一下请求,给你的代码加了几句就可以了,down函数里面的r ...

还是不行,不弄了,还是继续深造去。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 00:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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