python爬取下来的图片不可见_python爬取图片时忽略了一些图片

展开全部

真实图片地址是2113在客户端javascript代码中计算出来的.

你需要寻5261找Ly93dzMuc2luYWltZy5jbi9tdzYwMC8wMDczdExQR2d5MWZ3Z3h6ajlrMGtqMzBpYjBramtnaS5qcGc=

这样的内容4102,取出

Ly93dzMuc2luYWltZy5jbi9tdzYwMC8wMDczdExQR2d5MWZ3Z3h6ajlrMGtqMzBpYjBramtnaS5qcGc=

这段内容,做base64解码即得图片地址。1653

相应的脚本在

//cdn.jandan.net/static/min/91798e4c623fa60181a31d543488217eB2GDr79r.03100001.js

这段内容你通过get_page()爬到地页面中有,同样,该页面中有这样的html(为便于阅读已重排格式):

4001800

blank.gif

Ly93dzMuc2luYWltZy5jbi9tdzYwMC8wMDczdExQR2d5MWZ3Z3h6ajlrMGtqMzBpYjBramtnaS5qcGc=

这个img的onload调用的函数就在前面给出的那个js文件中:function jandan_load_img(b){

var d=$(b);

var f=d.next("span.img-hash");

var e=f.text();

f.remove();

var c=jdDw3Ldvi4NcbKboi4X19hCAmdC3Q3aZvN(e,"DGmLfT4H73yJdXXpXs3pw7uAiICcflZS");

var a=$('

'" target="_blank" class="view_img_link">[查看原图]

');

d.before(a);

d.before("
");

d.removeAttr("onload");

d.attr("src",location.protocol+c.replace(/(\/\/\w+\.sinaimg\.cn\/)(\w+)(\/.+\.gif)/,"$1thumb180$3"));

if(/\.gif$/.test(c)){

d.attr("org_src",location.protocol+c);

b.οnlοad=function(){

add_img_loading_mask(this,load_sina_gif)

}

}

它调用了jdDw3Ldvi4NcbKboi4X19hCAmdC3Q3aZvN对img-hash的内容做解码,这个函数同样在这个js文件中:var jdDw3Ldvi4NcbKboi4X19hCAmdC3Q3aZvN=function(o,y,g){

var d=o;var l="DECODE";

var y=y?y:"";

var g=g?g:0;

var h=4;

y=md5(y);

var x=md5(y.substr(0,16));

var v=md5(y.substr(16,16));

...中间部分略去...

if(l=="DECODE"){

m=base64_encode(m);

var c=new RegExp("=","g");

m=m.replace(c,"");

m=u+m;

m=base64_decode(d)

}

return m

};

你只需要在Python使用相应的库对抓取到的img-hash内容做解码即可得到图片地址。

你使用了str的find来从文本中定位位置,这样做太麻烦了,太多的代码细节,使用re模块做正则匹配就简单很多,更快的是直接使用现有的爬虫库.

使用re进行正则匹配,只需要使用正则式'(.+?)<'即可提取出该页面中所有加密的图片地址。import re

import base64

pat = re.compile('(.+?)<')

...

def get_imgurls(url):

urls = []

for imgurl in pat.findall(url_open(url).decode('utf-8')):

.append(str(base64.b64decode(imgurl), 'utf-8'))

return urls

然后就可以对get_imgurls返回的列表遍历,逐个交给save_img处理了。

使用爬取库也只需要寻找span,从中找出class='img-hash'即可读取text。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Python爬取百度图片并保存的示例代码: ```python # 导入依赖库 import requests import re import os # 设置搜索关键字 keyword = "美食" # 设置图片保存路径 save_path = "./images/" # 构造百度图片搜索的URL url = "https://image.baidu.com/search/index?tn=baiduimage&word={}".format(keyword) # 发送HTTP请求并获取响应 response = requests.get(url) # 使用正则表达式从响应内容中提取图片URL列表 img_urls = re.findall('"objURL":"(.*?)",', response.text, re.S) # 遍历图片URL列表并下载保存图片 for i, img_url in enumerate(img_urls): try: # 发送HTTP请求并获取响应 response = requests.get(img_url, timeout=10) # 设置图片保存路径 img_path = os.path.join(save_path, "{}.jpg".format(i)) # 保存图片 with open(img_path, "wb") as f: f.write(response.content) print("成功下载第{:>3d}张图片!".format(i+1)) except Exception as e: print("下载第{:>3d}张图片失败:{}".format(i+1, e)) ``` 解释一下上述代码的主要步骤: 1. 设置搜索关键字和图片保存路径 2. 构造百度图片搜索的URL 3. 发送HTTP请求并获取响应 4. 使用正则表达式从响应内容中提取图片URL列表 5. 遍历图片URL列表并下载保存图片 需要注意的是,这种方式只是简单的使用正则表达式从响应内容中提取图片URL,而没有使用任何API,因此可能存在一些不稳定性和容易被反爬虫机制封禁的风险。建议在使用注意合理使用代理、设置请求头等防反爬措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值