免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3525 | 回复: 9
打印 上一主题 下一主题

如何使用shell将抓取的静态链接转换成动态的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-08 13:29 |只看该作者 |倒序浏览
闲着无事帮市场的同事写了个脚本,用于抓取淘宝商城上那些涉嫌盗版公司产品链接,以减轻工作负担。脚本主要原理是利用正规表达式分析网页源码,提取盗版的商品名,商品的链接,价格,店主名称生成列表,同事会将复制到excle表格中,提交给淘宝。大半年来,脚本一直运行的很好,比之前纯手工点击网页复制黏贴方式效率高很多。但几天前同事告诉我,淘宝知会有些链接不合符规格,不能举报。查看了下所谓的”不符规格的链接“,原来是一些静态链接,但淘宝网页源码中该商品对应的链接就是静态链接。为了直观一点,这里对比下同一商品的静态链接和动态链接:
静态的:
  1. http://s.click.taobao.com/t_8?e=7HZ6jHxdN3bmd8F0R82JOzV3NZg%2BoYLcSXOE3pmzphn5pivxfdMpbhCffemlr75KAa9jh4avqIOAWnVLiUA%2FsRyZH%2FTwFsHo3V%2B51lgTYlz0LAymqSgP1lNDLfrOJyl1IQ%3D%3D&c=c40ca204b5032623b3829ac1a256e5fb&p=mm_29996058_0_0&n=63&u=0
复制代码
动态的:
  1. http://item.taobao.com/item.htm?id=13970855011&ref=&ali_trackid=2:mm_29996058_0_0,0:1328678903_4z6_1635934447
复制代码
其实都对应同一个商品,静态链接可能非常的长,而且包含物理路径。为了美观或安全的因素,通常会在服务器端把地址重写后再返还给浏览器客户端,这就是所谓的动态地址。研究了几天使用shell脚本自动把静态的地址转换成动态的地址,都没什么好的门路。我不得不让同事把地址一条条黏贴到浏览器中,来获取重写后的动态地址。
哪位朋友有好的方法或提议,在此可以共同探讨下。

论坛徽章:
0
2 [报告]
发表于 2012-02-08 13:57 |只看该作者
看页面是怎么搞的 shell怎么搞就是了

论坛徽章:
0
3 [报告]
发表于 2012-02-08 14:28 |只看该作者
回复 2# lkk2003rty
{:2_174:} 明白页面怎么搞不会带来任何帮助啊,看看下面这段源码就知道了:
<li class="list-item" >                        <h3 class="summary"><a stat="lf_aclog=24-13970855011-51-price_asc|-0&lf_acfrom=0&at_alitrackid=search8.taobao.com&stats_click=singleshop%3A1"   href="http://s.click.taobao.com/t_8?e=7HZ6jHxdN3bmd8F0R82JOzV3NZg%2BoYLcSXOE3pmzphn5pivxfdMpbhCffemlr75KAa9jh4avqIOAWnVLiUA%2FsRyZH%2FTwFsHo3V%2B51lgTYlz0LAymqSgP1lNDLfrOJyl1IQ%3D%3D&c=c40ca204b5032623b3829ac1a256e5fb&p=mm_29996058_0_0&n=63&u=0" target="_blank" class="EventCanSelect" title="小学五年级数学 五年级数学 特级教师新课程学习方法指导(通用版)">小学五年级数学 五年级数学 <span class=H>特级</span><span class=H>教师</span>新课程学习方法指导(通用版)                        </a></h3><div class="photo ">
                                <a stat="lf_aclog=24-13970855011-51-price_asc|-0&lf_acfrom=0&at_alitrackid=search8.taobao.com&stats_click=singleshop%3A1"   href="http://s.click.taobao.com/t_8?e=7HZ6jHxdN3bmd8F0R82JOzV3NZg%2BoYLcSXOE3pmzphn5pivxfdMpbhCffemlr75KAa9jh4avqIOAWnVLiUA%2FsRyZH%2FTwFsHo3V%2B51lgTYlz0LAymqSgP1lNDLfrOJyl1IQ%3D%3D&c=c40ca204b5032623b3829ac1a256e5fb&p=mm_29996058_0_0&n=63&u=0" target="_blank"><span><img data-ks-lazyload="http://img04.taobaocdn.com/bao/uploaded/i4/T1WkCIXaFlXXax9HQ__105507.jpg_sum.jpg"  class="small2big"  alt=""/></span></a>                  <i class="hate i-hate" data-spam-url="support.taobao.com/myservice/suit/accuse_punish.jhtml?Query=%CC%D8%BC%B6%BD%CC%CA%A6&BucketID=9&auction_num_id=13970855011&fromSource=search&Category=0&sort=price_asc&display_type=3" data-userid="16977708,50014932,0"         data-block-style="http://i.search.taobao.com/interface.php?do=add_style&cat=0&pid_type=1&pid=-703205324&ck=x2xpPLXeNoDvXfoYRLyjt58a1r6rB8LIq"         data-block-seller="http://i.search.taobao.com/interface.php?do=add_seller&cat=0&seller_id=16977708&ck=x2xpPLXeNoDvXfoYRLyjt58a1r6rB8LIq"></i>                        </div>                        <ul class="attribute"  userid="16977708" pid="1_-703205324">                    <li class="legend2">
                                   
                                </li>

                                <li class="sale"></li>
                                       <li class="place">上海</li>
                                <li class="price"><em>2.99</em>        <span class="shipping">运费:0.00</span>                   </li>

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
4 [报告]
发表于 2012-02-08 15:31 |只看该作者
楼主还是说说原始需求吧,比如抓去的页面.怎么得到的你所谓的静态链接.
从你的描述上感觉你绕弯子了

论坛徽章:
0
5 [报告]
发表于 2012-02-08 15:37 |只看该作者
回复 4# ziyunfei

我的需求是这样的,写个脚本能将
  1. http://s.click.taobao.com/t_8?e=7HZ6jHxdN3bmd8F0R82JOzV3NZg%2BoYLcSXOE3pmzphn5pivxfdMpbhCffemlr75KAa9jh4avqIOAWnVLiUA%2FsRyZH%2FTwFsHo3V%2B51lgTYlz0LAymqSgP1lNDLfrOJyl1IQ%3D%3D&c=c40ca204b5032623b3829ac1a256e5fb&p=mm_29996058_0_0&n=63&u=0
复制代码
转换成下面类型的地址
  1. http://item.taobao.com/item.htm?id=13970855011&ref=&ali_trackid=2:mm_29996058_0_0,0:1328678903_4z6_1635934447
复制代码

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
6 [报告]
发表于 2012-02-08 15:48 |只看该作者
cooluncle 发表于 2012-02-08 15:37
回复 4# ziyunfei

我的需求是这样的,写个脚本能将转换成下面类型的地址


好吧 既然你坚持这么说
  1. curl -Ie $(curl 'http://s.click.taobao.com/t_8?e=7HZ6jHxdN3bmd8F0R82JOzV3NZg%2BoYLcSXOE3pmzphn5pivxfdMpbhCffemlr75KAa9jh4avqIOAWnVLiUA%2FsRyZH%2FTwFsHo3V%2B51lgTYlz0LAymqSgP1lNDLfrOJyl1IQ%3D%3D&c=c40ca204b5032623b3829ac1a256e5fb&p=mm_29996058_0_0&n=63&u=0' -I 2>/dev/null| grep -oP '(?<=Location: ).+')  'http://s.click.taobao.com/t_8?e=7HZ6jHxdN3bmd8F0R82JOzV3NZg%2BoYLcSXOE3pmzphn5pivxfdMpbhCffemlr75KAa9jh4avqIOAWnVLiUA%2FsRyZH%2FTwFsHo3V%2B51lgTYlz0LAymqSgP1lNDLfrOJyl1IQ%3D%3D&c=c40ca204b5032623b3829ac1a256e5fb&p=mm_29996058_0_0&n=63&u=0' 2>/dev/null| grep -oP '(?<=Location: ).+'
复制代码

论坛徽章:
0
7 [报告]
发表于 2012-02-08 15:58 |只看该作者
下面这段代码是用于抓取链接的:
  1. #desc:提取同一家淘宝店铺的商品名,链接,价格
  2. sed -n '/<a target=\"_blank\"/,/<strong>.*<\/strong>/p' $1|\
  3.         sed -n '/class=\"permalink\"\|style=\"\"/,/<strong>.*<\/strong>/p'|\
  4.                 sed 's/^[\t| ]*//'|\
  5.                         tr '\n' ' '|\
  6.                                 sed -e 's#</strong>#&\n#g'|\
  7.                                         sed -e 's#.*<a.*href=\"\(.*\)\" class=.*> \(.*\) </a>.* <strong>\(.*\)</strong>.*#\2\t\1\t\3'#|\
  8.                                                 grep -v '</div>'|\
  9.                                                         egrep -v '(金太阳|悠悠课堂)' >> $(dirname $1)/$(basename $1).save

  10. egrep '(<h3.*</h3>|<li class="price"><em>.*</em>)' $1|\
  11.         tr '\n' ' '|\
  12.                 sed -e 's#</em>#&\n#g'|\
  13.                         egrep '<h3.*\h3>'|\
  14.                                 sed -e 's#.*\(<a.*</a>\).*\(<li class="price">.*\)#\1 \2#g'|\
  15.                                         sed -e 's/^<a.*\(href=.*\)/\1/g'|\
  16.                                                 sed 's#<span.*</span>##g'|\
  17.                                                         sed -e 's#</a> <li class="price"><em>\(.*\)</em>#\"\1\"#g'|\
  18.                                                                 awk -F'"'  '{print $8"\t"$2"\t"$10}' >> $(dirname $1)/$(basename $1).save
复制代码
抓取的结果类似:
  1. 2011-2012年证券从业资格考试 证券发行与承销+辅导 送课件        http://item.taobao.com/item.htm?id=13229029542        18.00
  2. 现货热销:2011年证券从业资格教材+辅导(基础+基金)4本        http://item.taobao.com/item.htm?id=9023342972        28.00
  3. 现货2011年证券从业资格考试辅导 证券投资分析 送课件        http://item.taobao.com/item.htm?id=14369108064        7.00
  4. 2011-2012年证券从业资格考试:证券投资分析教材+辅导丛书        http://item.taobao.com/item.htm?id=13573977108        12.00
  5. 正版!2012年证券从业考试 证券投资基金 教材+辅导 赠题库软件        http://detail.tmall.com/item.htm?id=14690644018        45.00
复制代码
但其中有些链接不是http://xxxxx?id=xxx&xxx的形式的,因为网页源码中得链接是静态的

论坛徽章:
0
8 [报告]
发表于 2012-02-08 16:08 |只看该作者
这个静动网址的转换规则应该是淘宝自己写的吧

论坛徽章:
0
9 [报告]
发表于 2012-02-08 16:23 |只看该作者
回复 6# ziyunfei
兄弟果然厉害,效果非常好...
这两天一直在研究怎么用wget来实现,最终都没能成功....

   

论坛徽章:
0
10 [报告]
发表于 2012-02-08 16:29 |只看该作者
回复 8# deepalley
是的,可以通过代码实现或者在apache,nginx里面用rewrite来实现,通常静态地址有利于搜索引擎收录,写的不好的动态地址会加重爬虫负担.....

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP