人生苦短丶 发表于 2019-11-14 21:10

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

本帖最后由 人生苦短丶 于 2019-11-15 11:04 编辑


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
    title = dom.xpath('//div[@class="main-image"]/p/a/img/@alt')

    img = requests.get(finalurl)

    with open(path + '/' + str(title)+ '.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 ...

还是不行,不弄了,还是继续深造去。。。
页: [1]
查看完整版本: 萌新刚接触爬虫,问一下这个代码有什么问题,爬出来的图片全是0字节