萌新刚接触爬虫,问一下这个代码有什么问题,爬出来的图片全是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()
你直接去访问爬出来的图片地址,看看能不能读到图,不能的话网站应该有限制 针对“下载抓取文件为空”的问题,按照以下方式排查
1.检测本地保存文件是否有写权限
2.代码中download中增加图片url打印,用浏览器方式确认合法
3.打印图片url http请求返回报文,确认非 404等报错
4.对比测试,图片访问是否存在cookie token等参数认证要求 用你的代码跑了一下,发现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-14 22:37
你直接去访问爬出来的图片地址,看看能不能读到图,不能的话网站应该有限制
就是因为他的那个图片是要从上个网址访问进去才能出来 cq5868177 发表于 2019-11-15 00:21
用你的代码跑了一下,发现ERR CODE403 请求,查看了一下请求,给你的代码加了几句就可以了,down函数里面的r ...
还是不行,不弄了,还是继续深造去。。。
页:
[1]