从百度图片搜索上下载叶片图像,作为柑橘溃疡病识别的负样本。
百度图片搜索的结果通过一个javascript函数动态生成:
function funURL(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q)
...{
arrImg[imgNum++]='<a href=http://image.baidu.com/i?ct=503316480&z='+a+'&tn=baiduimagedetail&word='+trim(b)+'&in='+c+'&cl='+d+'&lm='+e+'&pn='+f+'&rn=1 target=_blank>
<img src=http://'+g+'/it/u='+h+'&gp='+i+'.jpg></a>
<br><font size=1>'+j+'x'+k+' '+l+'k '+m+'</font><br>
<div class=r><a href=http://image.baidu.com/ir?t=1&u='+trim(n)+'&f='+trim(o)+'&jn='+p+' target=_blank>'+trim(q)+'</a>';
}
其中,显示图像部分代码为:
<img src=http://'+g+'/it/u='+h+'&gp='+i+'.jpg></a>
调用该js函数显示图像的代码为:
funURL('0','%CA%F7%D2%B6 ','7788','2&cm=1&sc=0','-1','620','t2.baidu.com','3656415474,414517057','28','670','944','24','jpg','http://www.52photoshop.cn/pic/FF152.JPG ','http://www.52photoshop.cn/pic27851.html ','7788','植物,<strong>树叶</strong>图片素材27851--我... ');
只需要提取其第7,8,9个参数,构造url地址即可。
分析主要代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace BaiduImages
...{
/**//**
* 从百度的图片搜索生成的HTML中分析出搜索获得的目标图像
*/
class BaiduImageUtils
...{
/**//**
* 分析的总控程序
* 从JAVASCRIPT脚本中分析出调用JS函数的代码
* 然后分析其参数
* 根据参数构建URL地址
* 返回页面中下一页链接地址
*/
public String parseImage(ref String content, ref LinkedList<String> imageUrls)
...{
String jsFunStartIdentifer = "funURL(";//javascript函数开始标识符
String jsFunEndIdentifer = ")"; //javascript函数结束标识符
int currentPos = 0;
int jsFunctionStartPos = content.IndexOf(jsFunStartIdentifer, currentPos);
int jsFunctionEndPos = jsFunctionStartPos;
while (jsFunctionStartPos > 0)
...{
jsFunctionStartPos = jsFunctionStartPos + jsFunStartIdentifer.Length;
jsFunctionEndPos = content.IndexOf(jsFunEndIdentifer, jsFunctionStartPos);//寻找结束标识符的为位置
if (jsFunctionEndPos < jsFunctionStartPos || jsFunctionEndPos <= 0)
break;
String jsFunctionStr = content.Substring(jsFunctionStartPos, jsFunctionEndPos - jsFunctionStartPos);
LinkedList<String> parameters = new LinkedList<string>();//参数向量
parseParameter(jsFunctionStr, ref parameters);// 从javascript函数中提取参数向量
String currentUrl = generateURL(parameters);//根据参数向量构建网页的URL地址
if(currentUrl!=null)
imageUrls.AddLast(currentUrl); //加入向量
jsFunctionStartPos = content.IndexOf(jsFunStartIdentifer, jsFunctionEndPos + jsFunEndIdentifer.Length);//寻找开始标识符的为位置
}
String nextpageUrl = parseNextpage(ref content);
return nextpageUrl;
}
/**//**
* 分析页面中下一页链接地址
*
* 先搜索下一页关键标识符,再搜索其链接开始标识符与链接结束标识符
*/
private String parseNextpage(ref String content)
...{
String nextpageStartIdentifer = "a href=";//下一页链接开始标识符
String nextpageEndIdentifer = "><"; //下一页链接结束标识符
String nextpageKeyIdentifer = "下一页"; //下一页关键标识符
int nextpageKeyPos = content.IndexOf(nextpageKeyIdentifer);
int nextpageStartPos=-1,nextpageEndPos=-1;
for (int i = nextpageKeyPos; i > 0; i--)
...{
String candidateStartStr=content.Substring(i,nextpageStartIdentifer.Length);
if(candidateStartStr.Equals(nextpageStartIdentifer))
...{
nextpageStartPos=i+nextpageStartIdentifer.Length;//找到链接开始位置
break;
}
}
nextpageEndPos = content.IndexOf(nextpageEndIdentifer, nextpageStartPos);//寻找链接结束位置
String nextpageUrl=null;
if(nextpageStartPos>=0&&nextpageEndPos>=0)
nextpageUrl=content.Substring(nextpageStartPos,nextpageEndPos-nextpageStartPos);
return nextpageUrl;
}
/**//**
* 根据一个参数向量构建网页的URL地址
* 构造格式为:src=http://'+g+'/it/u='+h+'&gp='+i+'.jpg
* g,h,i为参数向量的第7,8,9个变量(下标依次为6,7,8)
* (所有参数依次为:a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q)
*/
private String generateURL(LinkedList<String> parameters)
...{
String[] paramArray = new String[17];
int count = 0;
foreach (String param in parameters)
...{
paramArray[count++] = param;
}
String imageUrl = "http://" + paramArray[6] + "/it/u=" + paramArray[7] + "&gp=" + paramArray[8] + ".jpg";
String urlKeyIdentifier = "baidu.com";//url地址中必须存在baidu域名,否则提取错误,删除之
int index=imageUrl.IndexOf(urlKeyIdentifier);
return (index>0)?imageUrl:null;
}
/**//**
*
* 从javascript函数中提取参数向量
* funURL('0','%CA%F7%D2%B6 ','26631','2&cm=1&sc=0','-1','19','t5.baidu.com','1132581693,1396616653','-36','600','396','104','jpg','http://sucai.dabaoku.com/zhiwu/shuye/206.jpg ','http://sucai.dabaoku.com/zhiwu/shuye/web/206.htm ','26631','...?????<strong>??</strong>????206 ');
* 分析结果为:以"--"字符隔开
* 0--%CA%F7%D2%B6 --26631--2&cm=1&sc=0---1--19--t5.baidu.com--1132581693,1396616653
* ---36--600--396--104--jpg--http://sucai.dabaoku.com/zhiwu/shuye/206.jpg
* --http://sucai.dabaoku.com/zhiwu/shuye/web/206.htm --26631--...?????<strong>??</strong>????206
*/
private void parseParameter(String jsFunctionStr, ref LinkedList<String> parameters)
...{
String startIdentifer = "'";//参数开始标识符
String endIdentifer = "'"; //参数结束标识符
//分析参数信息
int currentPos = 0;
&nbs
分享到:
相关推荐
【百度图片批量下载器】是一种专门用于从百度图片搜索引擎中批量下载图片的工具。这款软件可以帮助用户快速、方便地获取所需的图片资源,尤其适合设计师、研究人员或者任何需要大量图片素材的用户。它的工作原理是...
python实现从百度自动搜索下载图片,根据输入的关键词,自动搜索
该软件的核心功能在于解析百度图片搜索结果页面的HTML代码,找到图片的实际链接,并支持设置各种参数来定制下载需求。例如,你可以设定下载的图片尺寸、类型(如JPG、PNG等),甚至可以指定下载某一特定页码范围内的...
标题“百度图片搜索并下载”指的是使用Java编程语言编写的程序,该程序能够根据用户输入的关键词,在百度图片搜索引擎上查找相关图片,并将其批量下载到本地计算机。这个工具可能适用于需要大量图片素材的设计师、...
标题 "百度图片批量下载" 暗示了我们即将探讨的是如何高效地从百度图片搜索引擎中下载大量图片。百度图片是互联网上最流行的图片搜索平台之一,提供了丰富的图像资源,适用于各种用途,如设计、研究、个人收藏等。...
【百度图片批量下载器】是一款专门针对百度图片搜索引擎设计的工具,它允许用户方便快捷地批量下载所需的图片资源。在日常工作中,无论是设计师寻找灵感、研究人员收集数据,还是普通用户保存个人兴趣的图片,这样的...
这样的工具通常基于Python的网络爬虫技术,结合百度图片搜索接口,实现对特定关键词的图片进行抓取和下载。Python的灵活性和丰富的第三方库使得这一任务变得相对简单。 【描述】:“百度图片下载器python版 百度...
"百度图片搜索器"是一款基于Web的图片搜索应用,它主要功能是帮助用户方便快捷地在互联网上查找和浏览各种图片资源。这个程序可能利用了百度搜索引擎提供的API接口,允许用户根据关键词、分类或者特定条件进行图片...
百度图片批量下载软件主要通过解析百度图片搜索页面的HTML代码,抓取图片URL,然后利用这些链接进行批量下载。它能识别并下载不同尺寸、类型的图片,包括JPEG、PNG、GIF等常见格式。同时,软件通常会提供设置选项,...
这意味着它需要理解和处理百度图片搜索的特定URL结构和返回结果格式,可能还需要处理登录验证、反爬虫策略等问题,以确保程序的稳定运行。 压缩包内的“百度图片下载.exe”是编译后的可执行文件,用户双击即可运行...
"百度图片批量下载工具"是一款专门针对百度图片搜索引擎设计的下载辅助软件。它通过解析百度图片搜索结果的网页源代码,提取出图片链接,进而实现一键批量下载。这款工具不仅操作简单,而且支持自定义设置,满足不同...
在这个案例中,爬虫被用来从百度图片搜索引擎获取数据。Python的`requests`库用于发送HTTP请求到百度服务器,检索搜索结果的HTML页面。然后,`BeautifulSoup`库解析这些HTML页面,找到图片链接。`BeautifulSoup`是一...
标题 "C#百度图片下载器源码" 描述了一个基于C#编程语言开发的应用程序,其主要功能是能够从百度网站上下载图片。这个工具对于开发者来说,可能是用于学习网络爬虫技术、图像处理或者自动化任务的一个实例。下面将...
这个工具的实现原理是通过网络爬虫技术抓取百度图片搜索引擎的结果,并将这些图片保存到本地。 首先,我们要了解C#中的网络请求。在C#中,可以使用`HttpClient`类来发送HTTP请求,获取网页内容。对于百度图片搜索,...
首先,要爬取百度图片,我们需要了解其图片搜索页面的URL结构。通常,百度图片的搜索结果URL会包含关键词参数,例如:`https://image.baidu.com/search/flip?word=关键词&tn=baiduimage&ie=utf-8&fr=aladdin`。这里...
标题中的“百度图片批量下载”指的是使用特定工具或方法,一次性获取百度图片搜索引擎上的大量图片资源。这种批量下载通常用于数据分析、设计素材收集或者个人兴趣爱好等场景。在这个案例中,用户无需手动逐个点击...
搜索图片:最容易想到的是爬百度图片的结果,我们就上百度图片看看: 随便搜索几个关键字,可以看到已经搜索出来很多张图片: 分析网页 我们点击右键,查看源代码: 打开源代码之后,发现一堆源代码比较难...
2. **编写HTTP请求**:使用Spring的`RestTemplate`或更现代的`WebClient`发送HTTP GET请求到百度图片的搜索接口,带上合适的查询参数,如关键词、页码等。 3. **解析HTML响应**:使用`Jsoup`解析返回的HTML响应,...