淘宝子账号登陆后台账号后台信息图打不开了咋回事

2015淘宝双11店铺承接页怎么玩?
核心提示:电商运营  在2015年淘宝双十一活动报名条件中,店铺承接页作为必选项;据了解,淘宝官方为所有参与2015双  在2015年淘宝双十一活动报名条件中,店铺承接页作为必选项;据了解,淘宝官方为所有参与2015双11大促的卖家提供默认大促店铺承接页,该页面开放编辑但不可删除,同时,主/分会场店铺信息将直接链接至官方提供的承接页。大促承接页的详细介绍:一2015淘宝双11店铺承接页设置——承接页重要信息:  1、承接页PC及无线端开放时间:10月中下旬(19日左右)-11月11日,后台开放装修;前台页面11月1号开放预热,11号零点活动正式开始。11月1号前用户浏览承接页转跳店铺首页,卖家可通过后台预览的方式查看承接页。  2、承接页出现位置:店铺导航“首页”右侧及大促主分会场引导,11号零点前系统会自动发布至导航。  3、承接页下线时间:11月12号零点系统自动下线,请卖家12号将导航入口设置删除。  4、承接页地址://***./dc.htm(您店铺名称+dc.htm)。  5、 返回主会场链接会在11月1号生效,1号前无法访问。  6、PC端大促承接页及无线端大促承接页视觉待10月公布。二2015淘宝双11店铺承接页设置——卖家必做的事情:  1、激活承接页:商品审核通过后,请务必点击进入旺铺装修后台激活承接页。  2、装修至导航:参与大促的卖家需要将承接页装修至店铺导航。  ①请“装修完”承接页后务必“点击发布”完成装修②返回装修”首页,鼠标放至到导航右上角,点击”编辑“③点击”添加“弹出框选择”页面“,勾选”双十一大促承接页”,点击确定即可④然后点击“发布”  3、必须发布: 店铺承接页装修完毕必须在点击右上角发布。在11月1日前,如果没有激活并发布承接页,官方将在11月1日对卖家的承接页进行强制发布。除了大促承接页以外,卖家还可在店铺营销中心进行其他活动的设置,包括试用、天天特价、买家秀等玩法。最后,希望卖家都能在2015淘宝双11大促中找到适合自己的玩法。15年淘宝的变化让多少卖家过着苦逼生活,店铺也玩的快死了,想要店铺不死?回复 不死 告诉你避免哪几个因素就可以让店铺起死回生!壹站电商壹站电商针对2015年淘宝最新变化为淘宝卖家提供优秀的电商运营服务,关注我们,为您提供淘宝最新资讯干货。
手机版扫描敬请点击微信图标前台利用jcrop作头像选择预览,后台通过django利用Uploadify组件上传图最终使用PIL做图像裁切_怎的采集淘宝宝贝的用户评价信息_程序员 这个证书到哪儿考__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
前台利用jcrop作头像选择预览,后台通过django利用Uploadify组件上传图最终使用PIL做图像裁切
怎的采集淘宝宝贝的用户评价信息
程序员 这个证书到哪儿考
前台利用jcrop作头像选择预览,后台通过django利用Uploadify组件上传图最终使用PIL做图像裁切
前台利用jcrop做头像选择预览,后台通过django利用Uploadify组件上传图最终使用PIL做图像裁切之前一直使用python的PIL自定义裁切图片,今天有需求需要做一个前端的选择预览页面,索性就把这个功能整理一下,分享给大家。
实现思路:
1、前端页面:
用户选择本地一张图片,然后通过鼠标缩放和移动,确定自己所需要的图片切块,最终把图片切块的 左边距,上边距,长,宽这些个参数传给后台
使用的django,主要实现2部分的功能,第一:图片上传,第二:图片裁切
先看一张图片:
前端页面:
后台最后得到的图片:
对于该demo中,我用到了以下js插件:
jquery-webox:弹出图层(你可以不关心)
jcrop:在线裁切预览图片 /content/Jcrop_Implementation_Theory.html
jquery.uploadify:上传附件
html页面:
a)用户信息页面:userinfo.html
b)弹出页面用于用户选择、上传、预览图片:index.html
django程序:
UploadImage模块下有以下几个文件:
d)views.py
下面就开始贴代码了
a)的代码:
{% extends "kidcrate/base.html" %}
{%block contentBar%}
&link href="/site_media/uploadify/uploadify.css" type="text/css" rel="stylesheet" /&
&script type="text/javascript" src="/site_media/uploadify/jquery.uploadify.min.js"&&/script&
&script type="text/javascript" src="/site_media/js/thickbox.js"&&/script&
&link rel='stylesheet' type='text/css' href='/site_media/css/thickbox.css' /&
&link href="/site_media/common/jquery_webox/jquery-webox.css" rel="stylesheet" type="text/css"&
&script src="/site_media/common/jquery_webox/jquery-webox.js"&&/script&
&script type="text/javascript"&
$(document).ready(function(){
//iframe弹出层调用
$('#outside').click(function(){
height:500,
width:800,
bgvisibel:true,
title:'修改头像',
iframe:'/uploadify?uuid='+$('#uuid').val()+'&rd='+Math.random()
&DIV class="yyh-page grid_9"&
&DIV class=widget&
&DIV class=widget-content&
&!-- basic form --&
&FORM id=basic class="yyh-form tabs-rel tabs-info on" method=post
action="/account/userinfo/"&
&input type="hidden"
id="uuid" name="uuid" value="{{uuid}}" /&
&DL class=required&
&LABEL for=producer&
&INPUT class=inputText style="color: #400080;font - size: 16" readonly="true" value="{{username}}"&
&B class=error&
&P class=hint&
&LABEL for=producer&
联系人真实姓名
&INPUT class=inputText name=devName value="{{devName}}"&
&B class=error&
&P class=hint&
&DL class=required&
&LABEL for=phone&
&INPUT class=inputText name=contactPhone value="{{contactPhone}}"&
&B class=error&
&P class=hint&
&DL class=required&
&LABEL for=address&
&INPUT class=inputText name=contactAddress value="{{contactAddress}}"&
&B class=error&
&P class=hint&
请填写真实的联系地址
&DL class=required&
&LABEL for=zipcode&
&INPUT class="inputText NumberValidate" name=contactZipCode value="{{contactZipCode}}"&
&B class=error&
&LABEL for=headimg&
&img id="screenshot_img" name="screeshot_img" src="/site_media/images/account_head/femail.jpg" width="120" height="120" /&&br&&br/&
&div id="upload_div" style="display:"&
&a class="Button blueButton Button18" href="javascript:void(0);" id="outside"&&strong&点我修改&/strong&&/a&
&DL class=submit&
&INPUT class="inputSubmit blue" value=保存 type=button onclick="this.form.submit();
&!-- end of basic form --&
{%endblock%}"
b)的代码:
&!DOCTYPE html&
&meta charset="UTF-8"&
&title&Django下利用Uploadify组件上传图片&/title&
&link rel="stylesheet" href="/site_media/jcrop/demos/demo_files/main.css" type="text/css" /&
&link rel="stylesheet" href="/site_media/jcrop/demos/demo_files/demos.css" type="text/css" /&
&link rel="stylesheet" href="/site_media/jcrop/css/jquery.Jcrop.css" type="text/css" /&
&script src="/site_media/jcrop/js/jquery.min.js"&&/script&
&script src="/site_media/jcrop/js/jquery.Jcrop.js"&&/script&
&script type="text/javascript"&
var img_top_margin,img_left_margin,img_width,img_//最后使用的2个变量
jQuery(function($){
// Create variables (in this scope) to hold the API and image size
var jcrop_api,
// Grab some information about the preview pane
$preview = $('#preview-pane'),
$pcnt = $('#preview-pane .preview-container'),
$pimg = $('#preview-pane .preview-container img'),
xsize = $pcnt.width(),
ysize = $pcnt.height();
console.log('init',[xsize,ysize]);
$('#target').Jcrop({
onChange: updatePreview,
onSelect: updatePreview,
aspectRatio: xsize / ysize
},function(){
// Use the API to get the real image size
var bounds = this.getBounds();
boundx = bounds[0];
boundy = bounds[1];
// Store the API in the jcrop_api variable
jcrop_api =
// Move the preview into the jcrop container for css positioning
$preview.appendTo(jcrop_api.ui.holder);
function updatePreview(c)
if (parseInt(c.w) & 0)
var rx = xsize / c.w;
var ry = ysize / c.h;
console.log("new width:"+Math.round(rx * boundx) );
console.log("new height:"+Math.round(ry * boundy) );
console.log("marginTop:"+Math.round(ry * c.y));
console.log("marginLeft:"+Math.round(rx * c.x));
img_top_margin=c.y;
img_left_margin=c.x;
img_width=c.w;
img_height=c.h;
$pimg.css({
width: Math.round(rx * boundx) + 'px',
height: Math.round(ry * boundy) + 'px',
marginLeft: '-' + Math.round(rx * c.x) + 'px',
marginTop: '-' + Math.round(ry * c.y) + 'px'
&link href="/site_media/uploadify/uploadify.css" type="text/css" rel="stylesheet" /&
&script type="text/javascript" src="/site_media/uploadify/swfobject.js"&&/script&
&script type="text/javascript" src="/site_media/uploadify/jquery.uploadify.v2.1.4.min.js"&&/script&
type="text/javascript" charset="utf-8" async defer&
function go() {
function replace_image(flag,path,uuid) {
console.log("==========replace_image=======");
console.log("marginTop:"+img_top_margin);
console.log("marginLeft:"+img_left_margin);
console.log("width:"+img_width);
console.log("height:"+img_height);
var params="&marginTop="+img_top_margin+"&marginLeft="+img_left_margin+"&width="+img_width+"&height="+img_
type: "GET",
url: "?replace_flag="+flag+"&savepath="+path+params,
dataType: "json",
success: function (json) {
alert(json.message);
//document.getElementById("btnquery").click();
document.getElementById("echo_href_msg").innerHTML = json.
&script type="text/javascript"&
$(document).ready(function() {
$('#file_upload').uploadify({
'uploader'
: '/site_media/uploadify/uploadify.swf',
: '{%url uploadify_script %}',
'cancelImg' : '/site_media/uploadify/cancel.png',
: '/upload',
: false,//
'multi': true,//设置可以上传多个文件
'queueSizeLimit':20,//设置可以同时20个文件
'removeCompleted':false,//
'sizeLimit':,//设置上传文件大小单位kb
'fileExt':'*.*.*.png',//设置上传文件类型为常用图片格式
'fileDesc':'Image Files',
'onInit': function () {},
'onError' : function (event,ID,fileObj,errorObj) {
$('#id_span_msg').html("上传失败,错误码:"+errorObj.type+" "+);
'onSelect': function (e, queueId, fileObj) {
$('#id_span_msg').html("");
'onAllComplete': function (event, data) {
if(data.filesUploaded&=1){
$('#id_span_msg').html("上传成功!");
&style type="text/css"&
/* Apply these styles only when #preview-pane has
been placed within the Jcrop widget */
.jcrop-holder #preview-pane {
z-index: 2000;
right: -280
padding: 6
border: 1px rgba(0,0,0,.4)
background-color:
-webkit-border-radius: 6
-moz-border-radius: 6
border-radius: 6
-webkit-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2);
box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2);
/* The Javascript code will set the aspect ratio of the crop
area based on the size of the thumbnail preview,
specified here */
#preview-pane .preview-container {
width: 180
height: 180
&h1&请选择图片上传&/h1&
&div class="demo-box"&
&form action="." method="post" enctype="multipart/form-data"&{% csrf_token %}
&input type="file" name="Filedata"/&
&input type="submit" value="上传"/& {%if message%}{{message}}{%endif%}
{% ifequal
upload_flag 1 %}
&img id="target" src="/site_media/upload/tmp/{{savepath}}"/&
&div id="preview-pane"&
&div class="preview-container"&
&img src="/site_media/upload/tmp/{{savepath}}" class="jcrop-preview" alt="Preview" /&
&br/&&br/&
&div id="echo_href_msg" &
&a href="#" onclick="replace_image('1','{{savepath}}');" &你确定要替换原来的图片?&/a&
{%endifequal%}
&h1&Uploadify组件上传方式&/h1&
&div class="demo-box"&
&input id="file_upload" type="file" name="Filedata"&
&div id="file_uploadQueue" class="uploadifyQueue"&&/div&
&p&&a href="javascript:$('#file_upload').uploadifyUpload()"&上传图片&/a&
&a href="javascript:$('#file_upload').uploadifyClearQueue()"&取消上传&/a&
&p&&span id="id_span_msg"&&/span&&/p&
c)的代码:
from django.conf.urls.defaults import patterns, url
urlpatterns = patterns('xue_wan_le.UploadImage.views',
url(r'^$', 'index', name='uploadify'),
url(r'^index/', 'index',name="uploadify_index"),
url(r'^uploadify_script/', 'uploadify_script',name="uploadify_script"),
d)的代码:
#coding=utf-8
from django.http import HttpResponse
from django.template import RequestContext
from django.shortcuts import render_to_response
import os,ImageFile,uuid,shutil
from django.conf import settings
from django.views.decorators.csrf import csrf_exempt
from django.utils import simplejson
from xue_mon.CookieUtil import CookieUtil
def index(request):
ctx=dict()
marginTop=0
marginLeft=0
if request.GET.get('marginTop'):
marginTop=int(request.GET.get('marginTop'))
if request.GET.get('marginLeft'):
marginLeft=int(request.GET.get('marginLeft'))
if request.GET.get('width'):
width=int(request.GET.get('width'))
if request.GET.get('height'):
height=int(request.GET.get('height'))
if request.GET.get('uuid'):
uuid=request.GET.get('uuid')
print '===uuid:'+request.GET.get('uuid')
request.session['replace_site_icon_uuid'] = uuid#保存UUID
if request.GET.get('replace_flag'):
filepath=request.GET.get('savepath')
olduuid=request.session['replace_site_icon_uuid']
print '===filepath:'+filepath
print '===olduuid:'+olduuid
print '====uuid:'+uuid
path=os.path.join(settings.MEDIA_ROOT,settings.SOURCE_IMAGE_TMP)
if filepath and olduuid:
if os.path.isfile(os.path.join(path,filepath)):
#先把新文件,换成旧文件名字
print 'olduuid:'+olduuid
newname=os.path.join(settings.MEDIA_ROOT,settings.SOURCE_IMAGE_TMP,olduuid+'.jpg')
print 'newname:'+newname
os.rename(os.path.join(path,filepath),newname)
shutil.move(os.path.join(settings.MEDIA_ROOT,settings.SOURCE_IMAGE_TMP,olduuid+'.jpg'),
os.path.join(settings.MEDIA_ROOT,'urls','sitethumbs',olduuid+'.jpg'))
from PIL import Image
path=os.path.join(settings.MEDIA_ROOT,'urls','sitethumbs',olduuid+'.jpg')
f = Image.open(path)
xsize,ysize=f.size
print 'image size:'+str(xsize)+":"+str(ysize)
#box变量是一个四元组(左,上,右,下)。
box=(marginLeft,marginTop,marginLeft+width,marginTop+height)
print '----1'
f.crop(box).save(path)
print '----2'
print 'crop image:'+path
except Exception,e:
return HttpResponse(simplejson.dumps({'message':'替换成功,关闭窗口'}))
except Exception,e:
print 'error.=='
if request.method=="POST":
file = request.FILES.get("Filedata",None)
(upload_flag,savepath)=_upload(file)
if upload_flag:
ctx["message"]=u"上传成功!"
ctx["upload_flag"]=1
ctx["message"]=u"上传出错!"
ctx["upload_flag"]=0
ctx["savepath"]=savepath
return render_to_response("uploadpic/index.html",ctx,RequestContext(request))
@csrf_exempt
def uploadify_script(request):
response=HttpResponse()
response['Content-Type']="text/javascript"
file = request.FILES.get("Filedata",None)
if _upload(file):
response.write(ret)
return response
def _upload(file):
'''图片上传函数'''
path=os.path.join(settings.MEDIA_ROOT,settings.SOURCE_IMAGE_TMP)
if not os.path.exists(path): #如果目录不存在创建目录
os.makedirs(path)
file_name=str(uuid.uuid1())+".jpg"
path_file=os.path.join(path,file_name)
parser = ImageFile.Parser()
for chunk in file.chunks():
parser.feed(chunk)
img = parser.close()
if img.mode != "RGB":
img = img.convert("RGB")
img.save(path_file, 'jpeg',quality=100)
print 'img.save:'+path_file
except Exception,e:
return (False,"")
return (True,file_name)
return (False,"")
index.html和view.py是功能实现的主要部分,如果有疑问可以发评论给我,或者新浪微博私信给我/changeself
怎的采集淘宝宝贝的用户评价信息
怎样采集淘宝宝贝的用户评价信息怎样采集淘宝宝贝的用户评价信息 日  MetaSeeker速成手册从《卓越网翻页抓取不了怎么办》 开始连续多章讲解采集AJAX网站的技巧。AJAX网站内容使用Javascript编程语言动态显示,给普通网络爬虫造成很大障碍,而网站采集器MetaSeeker 嵌 入了一个完整的web浏览器,理论上说,网页上能够看到的内容都能够采集下来。但是,Javascript是一个强大的编程语言,AJAX网页内容显示技 巧千变万化,在不定制的情况下,几乎不可能存在一个能够应对所有AJAX情形的网站采集器。这也是MetaSeeker快速升级的原因:将最新出现的 AJAX开发模式纳入其中。2010年5月,MetaSeeker再次为提升AJAX网站采集能力 进行了升级,主要目的是采集淘宝宝贝的用户评论信息,中国人民大学某研究室的科研项目期望从淘宝宝贝的普通商品信息和用户评论信息中挖掘出某些关联规则。本文将详细解释淘宝宝贝的评论信息的采集规则的定义方法。   对采集目标的描述:
样本页面 :/item.htm?id=&sourc e=dou&prc=2&cm_cat=   主题名   demo_TB_detail :采集淘宝宝贝的普通信息
  demo_TB_comment :采集用户评论信息
  采集的内容
  采集商品信息
  商品名
  商品价格
  采集所有用户评论
  买家网址
  翻页采集所有评论信息
  注释1 :目标网站的网页结构可能会改变,一些重大改变将影响信息结构 的可用性,如果加载本文提到的信息结构时发现某些信息属性 (用于存储采集到的数据的字段)定位失败,请参照《修改失效的采集规则》 调整信息属性的映射关系。
  注释2 :本文非入门教程,所以,不会将操作步骤一步步分解开并用屏幕截图显示出来,如果需要入门知识,请顺序阅读《MetaSeeker速成手册》。
在淘宝宝贝网页上,用户评论显示在"评价详情 "标签(Tab)下,点击这个标签时,网页使用Javascript从淘宝服务器上将评价信息下载并显示出来。下面我们做个实验。
    图1
图1有如下步骤:
等待网页加载完成,此时,MetaStudio底部的状态条上显示"完成 "字样。
  关闭反向选择 ,即复选框(checkbox)不要勾选。
  点击网页上的"评价详情 "标签,可以看到网页内容改变了,用户评论信息显示了出来
  设置反向选择,以便快速定位DOM节点。
  选择一条评论信息,用鼠标点击它
  弹出一个对话框,显示"Error: Cannot find the node",说明MetaStudio没有在DOM树上定位到对应于被点击的用户评论的DOM节点。如果定位成功,DOM树应该自动展开,并且在对话框中显示定位到的DOM节点号。
  此时,选择MetaStudio的菜单"文件 "-〉"刷新DOM ",再点击网页上的用户评论,成功定位到DOM节点。这说明一开始加载的网页上没有用户评论,用户评论是后来通过Javascript程序异步加载上来的。这是判断是否用AJAX显示网页内容的重要准则。
为了采集用户评论信息,DataScraper必须模拟用户点击"评价详情 "标签,所以,需要定义两个信息结构:第一个从样本页面上采集普通信息并模拟用户点击;第二个从用户评论列表中采集信息。这跟层级导航采集 的原理一样,但是,普通的层级采集是导航到其它网页,而本例没有导航到其它网页,仅仅局部修改网页内容。
    图2
图2有如下步骤:
为所有信息属性作数据映射和FreeFormat 映射,FreeFormat映射虽然不是必须的,但是可以大大提高采集规则的适应度,即使目标网站的网页结构修改了,采用FreeFormat技术可以在一定限度内确保采集规则不失效。
  为整个整理箱做FreeFormat映射,用以提高定位精度,其原理说明参见《采集新蛋网商品价格》     图3
图3显示了很多步骤,并不是采集淘宝宝贝信息所特有的,而是我们期望通过这个案例讲解更多使用技巧。步骤如下:
转到Clue Editor 工作台,并点击newClue 按钮创建一条线索 (用于指导网络爬虫采集其它网页)
  设置成线内线索 类型,但是不是为了翻页导航采集,而是为了导航到用户评论。关于线内线索和翻页采集请参见《批量采集当当网价格》   点击Marker 单选钮(radio button),表示根据网页上的记号定位线索,本例的记号就是文字"评价详情 "
  通常情况下,一旦设置成线内线索,目标主题名称 一栏就填入了当前主题名,可以参看翻页采集案例 ,但是,点击"评价详情 "后,网页内容被局部修改了,而且要采集的用户评论显然与当前主题采集的商品信息属于不同语义范畴,所以,应该另起一个主题名,即填入:demo_TB_comment   设置反向选择 模式,以便快速定位DOM节点
  点击"评价详情 "标签。因为设置了反向选择模式,所以,内嵌浏览器并没有向淘宝服务器发起下载评论信息的请求,相反,自动定位到DOM树上的对应节点
  在DOM树上找到代表整个标签条的那个节点,并作线索映射,表示在这个网页区域内定位线索
  在DOM树上找到包含内容"评价详情 "的那个TEXT节点,做记号映射。应该注意到 :这个记号的完整内容是"评价详情( ",后面的括号是不需要的
  设置记号模式,不勾选这个复选框,表示只要网页上出现记号值就表示符合规则,这叫包含模式 ,而不需要网页节点内容与记号完全一致,这叫相同模式 ,这是为了配合第8步和第10步。
  编辑记号值,删除后面的括号。第8、9、10三步是可选操作,察看生成的导航采集规则(点击viewSCE 按钮)可以看到差别。
  点击MetaStudio工具条的schema 按钮,将信息结构和MetaStudio自动生成的采集规则上载到服务器上,以便DataScraper随时随地采集网络内容。
首先选择MetaStudio的菜单项"文件 "-〉"创建工作台 "清空工作台。
    图4
  清空工作台后,参照图4进行如下步骤:
填写主题名demo_TB_comment   将样本页面的网址手工拷入Theme Editor 工作台的页面地址 输入栏
  如果前面设置了反向选择模式,需要关闭这种模式
  因为关闭了反向选择模式,点击网页上的"评价详情 "标签将激发浏览器从淘宝服务器上下载用户评论信息并显示在网页上。一直等待评论信息显示全了再进行下面的步骤
  选择菜单项"文件 "-〉"刷新DOM ",刷新DOM树。此时设置反向选择模式并点击网页上的评论不会遇到图1显示的"Cannot find the node"错误。
    图5
图5显示如下步骤:
为了采集多条评论信息,采用样例复制品映射 方法,详细说明参见《采集当当百货价格以建立比价系统》   为了能够在网页上精确定位,定义了一个嵌套的整理箱,有两层容器节点,分别是评论 和list ,并且为顶层容器节点作FreeFormat映射,这并不是必须的,在2.1.1节已经详细说明了为什么要这么做。
    图6
图6显示怎样设置AJAX采集模式,即勾选菜单项"延长模式 "和"积极模式 ",详细参见《卓越网翻页抓取不了怎么办》
    图7
图7显示如下步骤:
在Clue Editor 工作台上创建一条线索
  设置成线内线索类型
  设置记号线索类型,网页上的"下一页 "字样作为记号。
  进行线索映射
  进行记号映射
  将记号识别模式设置成包含模式   编辑记号值,将"下一页&& "中的两个大于号删除
    图8
MetaSeeker采用的FreeFormat技术能够提高采集规则的适应性,所以,即使没有显式作FreeFormat映 射,MetaStudio缺省情况下计算采集规则时也会自动选择FreeFormat标志,在网页上存在很多@class和@id属性,它们都有可能被自 动选用,但是,有时候自动选用的不太合适,需要手工调整,一般遵从就近原则 。手工调整方法是设置节点定位首选项。图8显示设置步骤:
选择菜单"配置 "-〉"首选项 "。
  在首选项弹出对话框中选择"线索定位 "标签
  选择"偏好class ",就会优选@class='show-rate-table',而不选@id='reviews',前者更靠近表示翻页区的DOM节点HTML TFOOT
  注释 :如果不采用就近原则,而是采用缺省设置,MetaStudio会自动选择@id='reviews',实测发现有时候翻页不成功,很 有可能网页的动态修改部分的结构有变化,如果不就近选择的话,可能在节点@id='reviews'和@class='show-rate-table' 之间动态插入了其它HTML DOM节点,造成定位失败。如果采用就近原则,动态插入其它DOM节点的几率大大降低。
  至此,两个信息结构都定义完了,上载后可供DataScraper使用。
如果手工执行批量采集任务,在DataScraper的主题列表中只对主题名demo_TB_detail 执行采集操作即可,DataScraper会自动从第一个主题导航到第二个主题。参看《批量采集当当网价格》 介绍的操作方法。自动周期性批量采集方法一样,只需为第一个主题指定周期性采集指令即可。
如果想修改以前定义的信息结构,例如,目标网页结构变了需要修改采集规则,需要先将其加载到MetaStudio的工作台上。第一个信息结构是普通的网页采集信息结构,加载方法没有什么不同。第二个信息结构用于采集AJAX显示的内容,需要执行"后续分析 "操作。
    图9
图9显示demo_TB_comment 的加载过程:
在Schema List 工作台上选中待加载的信息结构,并点击鼠标右键,弹出菜单
  选择菜单项"加载 ",开始加载信息结构
  能够看到网页已经完全加载到内嵌浏览器上了,而且弹出一个对话框,提示用户进行后续分析   关闭反向选择模式
  在网页上点击"评价详情 ",激发网页从淘宝服务器上下载并显示用户评论信息
  等看到评论信息已经显示了,选择菜单"文件 "-〉"后续分析 "
  注意 :MetaStudio有个缺陷:如果两个信息结构使用相同的样本页面,而且第一个信息结构已经加载到工作台上了,然后加载第二个,则MetaStudio的加载过程会一直等待。本例这两个信息结构就符合这个条件,如果demo_TB_detail 已经加载到工作台了,现在需要看demo_TB_comment , 加载会一直处于等待状态。从内部实现原理角度进行分析,MetaStudio是在等待第二个样本页面加载到浏览器上,事实上第二个样本页面与第一个相同从 而已经在浏览器上了,MetaStudio却不知道,所以,一直等下去。该bug将在以后版本修改。当前,需要避开这个bug,可以重新运行 MetaStudio再加载第二个信息结构。
程序员 这个证书到哪儿考
软件工程师 这个证书到哪儿考?这是证书的样张/html/exception/showImage.php?url=/img//.jpg
计算机信息高新技术软件工程师
这个考试难道只能到北大青鸟去考吗?(要交1万多啦)
我去(http://www./EIModles.aspx)没看见有这个考试。
我想单独去考这个,也就是自学考,能不能?详细?------解决方案--------------------这个没啥用的------解决方案--------------------------解决方案--------------------晕,你这个是北大青鸟的证书没有用的,要考就考国家软件技术资格考试,软考的证书还比这个有用!!!
北大青鸟的随便学一下,很简单的,过考过了,没用的!!!------解决方案--------------------据说去考个JAVA的认证有用,考系统分析师有用。
据说软件设计师没用,不过我也考了。
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:

我要回帖

更多关于 淘宝子账号后台 的文章

 

随机推荐