[四星]写一个脚本,自动找到相关图书和价格
- leetom
- 帖子: 296
- 注册时间: 2009-01-23 19:28
Re: [四星]写一个脚本,自动找到相关图书和价格
我错了,我不该进来的,进来都看不懂。。。
- cupid-glory
- 帖子: 19
- 注册时间: 2008-05-31 13:28
-
- 帖子: 18
- 注册时间: 2008-01-12 0:09
Re: [四星]写一个脚本,自动找到相关图书和价格
markmark
- zmdwjx1981
- 帖子: 189
- 注册时间: 2009-07-20 14:06
- 来自: YKBJ
- 联系:
-
- 帖子: 7
- 注册时间: 2009-05-25 23:18
Re: [四星]写一个脚本,自动找到相关图书和价格
恩,不错,学习了。keky 写了:呵呵,很久没来了,发现还有这个任务蛮有意思的,正好复习一下perl,下面是我的代码,大家轻拍噢,只实现了dangdang上的信息爬取。在此感谢xiooli 童鞋的代码,在编程的过程中给了很多的参考价值。
大家多多交流哈..代码: 全选
#!/usr/bin/perl -W #=========get the books info from dangdang.com #=========by keky, hitkeky[AT]gmail[DOT]com========= #=========Usage: ./thisfile BOOKNAME========= #=========Test Environment's encoding is utf8 #=========modules reserved: LWP Text::Iconv== use strict; use LWP; use Text::Iconv; my $key = $ARGV[0]; my $g2u = Text::Iconv->new('cp936','utf8'); ##ENCODING CONVERTER l change from cp936 2 utf8 my $u2g = Text::Iconv->new('utf8','gb2312');##ENCODING CONVERTER l change from utf8 2 gb2312 $key = $u2g->convert($key); my $agent = LWP::UserAgent->new(); my $pages = &getMaxPage; die "There is no result for your query!Please try again" unless $pages != -1; #there is no result for( my $i = 1; $i <= $pages; ++$i)###print info for pages { my $pageInfo = &getPages( $i ); &printInfo( $pageInfo ); } #####*************functions******################ sub removePoint{#remove the marks unusefull my $tp = $_[0]; $tp =~ s/\<.*?\>//g; return $tp; } sub printInfo{ #print the information needed $_ = $_[0]; while( 1 ){ if( $_ =~ m/\<a.*pub_name.*/ ) #match the books { $_ = $'; #get the remained info my $bookName = &removePoint( $& );#get bookName print $bookName."\n"; if( $_ =~ m/\<h6\>.*\<\/h6\>/){ #match the prices of the books $_ = $'; my $price = $&; $price = &removePoint( $& ); print $price."\n"; } } else { last; } } } sub getPages{ my $num = $_[0]; my $url = 'http://search.dangdang.com/book/search_pub.php?key='.$key.'&page='.$num.'&category=01'; my $response = $agent->get( $url ); #my $response = $agent->request( $request ); $response->is_success or die "$url: ".$response->message."\n"; my $tmp = $g2u->convert( $response->content); return $tmp; } sub getMaxPage{ #get the pages' number my $tmp = &getPages( 1 ); if( $tmp =~ m/maxPage=(\d+)/){ print "you are right!"; print "maxPage=:".$1."\n"; return $1; } return -1; }
-
- 帖子: 2
- 注册时间: 2010-06-09 19:08
Re: [四星]写一个脚本,自动找到相关图书和价格
我是新手看不懂你们再说什么,只是来试试云输入法
-
- 帖子: 22
- 注册时间: 2007-03-01 15:22
- 来自: 广州
Re: [四星]写一个脚本,自动找到相关图书和价格
代码: 全选
#!/bin/bash
amazon1='http://www.amazon.cn/s/ref=nb_ss?url=search-alias%3Dbooks&keywords='
amazon2='&Go.x=0&Go.y=0&searchKind=keyword'
: > .amazon.html
wget -q -c -O .amazon.html $amazon1$1$amazon2
cnt=`grep -c '<div class="productTitle">' .amazon.html`
for (( i=1;i<=cnt;i++ ))
do
grep -m $i '<div class="productTitle">' .amazon.html | tail -1 | sed -e 's/<[^>]*>//g' -e 's/ / /g' -e 's/ //g'
echo " 原价 amazon价"
grep -m $i '<div class="newPrice">' .amazon.html | tail -1 | sed -e 's/<[^>]*>//g' -e 's/ / /g'
echo
done
echo '--------------------------------------------------------------------'
dangdang1='http://search.dangdang.com/book/search_pub.php?catalog=01&key='
dangdang2='&SearchFromTop=1'
bookname=`echo $1 | iconv -f utf8 -t gbk`
: > .dangdang.html
wget -q -c -O .dangdang.html $dangdang1$bookname$dangdang2
iconv -c -f gbk -t utf8 .dangdang.html > .dangdang.utf8.html
cnt=`grep -c '<a name="pub_name"' .dangdang.utf8.html`
if (( cnt>12 ))
then
cnt=12
fi
for (( i=1;i<=cnt;i++ ))
do
grep -m $i '<a name="pub_name"' .dangdang.utf8.html | tail -1 | sed -e 's/<[^>]*>//g' -e 's/\t//g'
echo " 原价 dangdang价"
grep -m $i '<h6><span class="gray del">' .dangdang.utf8.html | tail -1 | sed -e 's/<[^>]*>//g' -e 's/ //g'
echo
done
代码: 全选
jackhunt@laptop:~/脚本$ ./bookpricecompare.sh ubuntu官方指南
ubuntu官方指南(附盘) 希尔、等 人民邮电 (2007-05出版)
原价 amazon价
¥ 39.00 ¥ 29.30
--------------------------------------------------------------------
Ubuntu官方指南(附光盘)
原价 dangdang价
¥39.00 ¥32.40 折扣:83折 节省:¥6.60
很早之前弄了一个简单的比较当当和卓越的书价的脚本
- ubuntu1023
- 帖子: 1791
- 注册时间: 2010-06-04 1:06
-
- 帖子: 3
- 注册时间: 2010-06-02 22:17
Re: [四星]写一个脚本,自动找到相关图书和价格
不懂,纯支持
- linxiaoyu
- 帖子: 39
- 注册时间: 2009-05-03 21:09
- Loop.wu
- 帖子: 102
- 注册时间: 2011-03-28 11:04
- 来自: 我躲着,你来找
- 联系:
Re: [四星]写一个脚本,自动找到相关图书和价格
大家的shell编程很猛阿
弯柚博客-Linux-嵌入式-驱动-Android开发->http://www.ourunix.org
使用redhat2年,正在使用unbuntu10.04,现为软件蓝领。
Unix/Linux技术研讨群:53720857
《玩转Linux》
《深入Linux驱动》
《Android自学教程》
弯柚博客---一个分享嵌入式系统、Linux新技术的平台,招募一起学习的同志!!!
使用redhat2年,正在使用unbuntu10.04,现为软件蓝领。
Unix/Linux技术研讨群:53720857
《玩转Linux》
《深入Linux驱动》
《Android自学教程》
弯柚博客---一个分享嵌入式系统、Linux新技术的平台,招募一起学习的同志!!!
-
- 帖子: 9
- 注册时间: 2012-05-10 22:17
Re: [四星]写一个脚本,自动找到相关图书和价格
都是大牛啊啊啊。。。。。
-
- 帖子: 2
- 注册时间: 2011-03-10 22:01
Re: [四星]写一个脚本,自动找到相关图书和价格
mark……想学个脚本
- 月下叹逍遥
- 论坛版主
- 帖子: 33994
- 注册时间: 2010-10-07 14:23
- 系统: Archdows10
- 来自: 某系某星某洲某国某省某市
- 联系:
Re: [四星]写一个脚本,自动找到相关图书和价格
从京东查询
已知bug,无法获取第三方价格
已知bug,无法获取第三方价格
代码: 全选
import urllib.request
from bs4 import BeautifulSoup
import sys
def getList(key):
url="http://search.jd.com/Search?keyword={0}".format(key)
data=urllib.request.urlopen(url).read()
page_data=data
soup=BeautifulSoup(page_data,'lxml')
namelist=[]
pricelist=[]
for link in soup.findAll('div',class_="p-name"):
namelist.append(link.a.em)
for link in soup.findAll('div',class_="p-price"):
pricelist.append(link.strong.i)
L=[]
for i in range(len(namelist)):
p=str(pricelist[i])[:-4]
p=p[3:]
n=str(namelist[i])[:-5]
n=n[4:]
n=n.replace('<font class="skcolor_ljg">', '')
n=n.replace('</font>','')
L.append([p,n])
L.sort(key=lambda x:x[0])
for i in L:
print(i[0],i[1])
getList(sys.argv[1])
浮生七十今三十,从此凄惶未可知