Open liuzyii opened 5 months ago
您好,非常感谢您提供的解决方法。试过了很有效。但是下载的图片有些问题,部分图片不能完全展示,类似图中这样(下半部分缺失),您知道该如何解决这个问题吗?
class MyImagesPipeline(ImagesPipeline): def get_media_requests(self, item, info): if len(item['weibo']['pics']) == 1: image_url = 'https://image.baidu.com/search/down?url='+item['weibo']['pics'][0] yield scrapy.Request( image_url, meta={ 'item': item, 'sign': '' }) else: sign = 0 for image_url in item['weibo']['pics']: full_image_url = 'https://image.baidu.com/search/down?url=' + image_url yield scrapy.Request(full_image_url, meta={ 'item': item, 'sign': '-' + str(sign) }) sign += 1
def file_path(self, request, response=None, info=None):
image_url = request.url
item = request.meta['item']
sign = request.meta['sign']
base_dir = '结果文件' + os.sep + item['keyword'] + os.sep + 'images'
if not os.path.isdir(base_dir):
os.makedirs(base_dir)
image_suffix = image_url[image_url.rfind('.'):]
file_path = base_dir + os.sep + item['weibo'][
'id'] + sign + image_suffix
return file_path
请问是这样拼接的么,还是下载不了呢
您好,非常感谢您提供的解决方法。试过了很有效。但是下载的图片有些问题,部分图片不能完全展示,类似图中这样(下半部分缺失),您知道该如何解决这个问题吗?
你是怎么拼接的呀 是这样么class MyImagesPipeline(ImagesPipeline): def get_media_requests(self, item, info): if len(item['weibo']['pics']) == 1: image_url = 'https://image.baidu.com/search/down?url='+item['weibo']['pics'][0] yield scrapy.Request( image_url, meta={ 'item': item, 'sign': '' }) else: sign = 0 for image_url in item['weibo']['pics']: full_image_url = 'https://image.baidu.com/search/down?url=' + image_url yield scrapy.Request(full_image_url, meta={ 'item': item, 'sign': '-' + str(sign) }) sign += 1
def file_path(self, request, response=None, info=None):
image_url = request.url
item = request.meta['item']
sign = request.meta['sign']
base_dir = '结果文件' + os.sep + item['keyword'] + os.sep + 'images'
if not os.path.isdir(base_dir):
os.makedirs(base_dir)
image_suffix = image_url[image_url.rfind('.'):]
file_path = base_dir + os.sep + item['weibo'][
'id'] + sign + image_suffix
return file_path
您好,非常感谢您提供的解决方法。试过了很有效。但是下载的图片有些问题,部分图片不能完全展示,类似图中这样(下半部分缺失),您知道该如何解决这个问题吗?
你是怎么拼接的呀 是这样么class MyImagesPipeline(ImagesPipeline): def get_media_requests(self, item, info): if len(item['weibo']['pics']) == 1: image_url = 'https://image.baidu.com/search/down?url='+item['weibo']['pics'][0] yield scrapy.Request( image_url, meta={ 'item': item, 'sign': '' }) else: sign = 0 for image_url in item['weibo']['pics']: full_image_url = 'https://image.baidu.com/search/down?url=' + image_url yield scrapy.Request(full_image_url, meta={ 'item': item, 'sign': '-' + str(sign) }) sign += 1
def file_path(self, request, response=None, info=None): image_url = request.url item = request.meta['item'] sign = request.meta['sign'] base_dir = '结果文件' + os.sep + item['keyword'] + os.sep + 'images' if not os.path.isdir(base_dir): os.makedirs(base_dir) image_suffix = image_url[image_url.rfind('.'):] file_path = base_dir + os.sep + item['weibo'][ 'id'] + sign + image_suffix return file_path
经过测试目前可以正常下载图片,感谢大家的经验分享
您好,非常感谢您提供的解决方法。试过了很有效。但是下载的图片有些问题,部分图片不能完全展示,类似图中这样(下半部分缺失),您知道该如何解决这个问题吗?
你是怎么拼接的呀 是这样么class MyImagesPipeline(ImagesPipeline): def get_media_requests(self, item, info): if len(item['weibo']['pics']) == 1: image_url = 'https://image.baidu.com/search/down?url='+item['weibo']['pics'][0] yield scrapy.Request( image_url, meta={ 'item': item, 'sign': '' }) else: sign = 0 for image_url in item['weibo']['pics']: full_image_url = 'https://image.baidu.com/search/down?url=' + image_url yield scrapy.Request(full_image_url, meta={ 'item': item, 'sign': '-' + str(sign) }) sign += 1
def file_path(self, request, response=None, info=None): image_url = request.url item = request.meta['item'] sign = request.meta['sign'] base_dir = '结果文件' + os.sep + item['keyword'] + os.sep + 'images' if not os.path.isdir(base_dir): os.makedirs(base_dir) image_suffix = image_url[image_url.rfind('.'):] file_path = base_dir + os.sep + item['weibo'][ 'id'] + sign + image_suffix return file_path
经过测试目前可以正常下载图片,感谢大家的经验分享
回复中提到的图片异常的问题,我并没有遇到,也无法复现。修改下载链接的方法,在我的机器上,是可以正常工作的。
感谢作者提供的便利工具,2024年5月1日,由于微博防盗链机制,直接获得的图片链接已经无法访问,有相似问题的朋友可自行在MyImagesPipeline中,修改并拼接图片下载链接,以实现下载
eg: 爬虫获取的原链接https://wx2.sinaimg.cn/large/005EOMxagy1hleevmegvjj33kg2ocnpg.jpg 修改拼接后的链接https://image.baidu.com/search/down?url=https://wx2.sinaimg.cn/large/005EOMxagy1hleevmegvjj33kg2ocnpg.jpg
本人爬虫外行,仅在三台不同IP的设备下人工测试过,百度图片外链几乎不限频率不限速。
参考:https://blog.axiaoxin.com/post/2023-10-14-%E5%85%8D%E8%B4%B9%E5%9B%BE%E5%BA%8A%E4%B9%8B%E5%BE%AE%E5%8D%9A%E5%A4%96%E9%93%BE%E5%9B%BE%E7%89%87%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/