[四星]写一个脚本,自动找到相关图书和价格

除了美化之外,还可以来尝试挑战一下任务
回复
头像
leetom
帖子: 296
注册时间: 2009-01-23 19:28

Re: [四星]写一个脚本,自动找到相关图书和价格

#31

帖子 leetom » 2009-11-02 12:12

我错了,我不该进来的,进来都看不懂。。。
头像
cupid-glory
帖子: 19
注册时间: 2008-05-31 13:28

Re: [四星]写一个脚本,自动找到相关图书和价格

#32

帖子 cupid-glory » 2009-11-03 10:57

mark
上山打野
帖子: 18
注册时间: 2008-01-12 0:09

Re: [四星]写一个脚本,自动找到相关图书和价格

#33

帖子 上山打野 » 2009-11-19 0:42

markmark :em11
头像
zmdwjx1981
帖子: 189
注册时间: 2009-07-20 14:06
来自: YKBJ
联系:

Re: [四星]写一个脚本,自动找到相关图书和价格

#34

帖子 zmdwjx1981 » 2009-11-21 20:20

纯支持!看不懂。 :em02
有些事物是Del不掉的,比如感情,比如某个人,比如某些人。。。
lemontv
帖子: 7
注册时间: 2009-05-25 23:18

Re: [四星]写一个脚本,自动找到相关图书和价格

#35

帖子 lemontv » 2009-11-25 13:48

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;
}
恩,不错,学习了。
neverps
帖子: 2
注册时间: 2010-06-09 19:08

Re: [四星]写一个脚本,自动找到相关图书和价格

#36

帖子 neverps » 2010-06-09 20:29

我是新手看不懂你们再说什么,只是来试试云输入法
Robinho
帖子: 22
注册时间: 2007-03-01 15:22
来自: 广州

Re: [四星]写一个脚本,自动找到相关图书和价格

#37

帖子 Robinho » 2010-07-06 20:14

代码: 全选

#!/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/&nbsp;/ /g' -e 's/   //g'
	echo "   原价     amazon价"
	grep -m $i '<div class="newPrice">' .amazon.html | tail -1 | sed -e 's/<[^>]*>//g' -e 's/&nbsp;/ /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 

:em06 很早之前弄了一个简单的比较当当和卓越的书价的脚本
leather0906
帖子: 3
注册时间: 2010-06-02 22:17

Re: [四星]写一个脚本,自动找到相关图书和价格

#39

帖子 leather0906 » 2010-08-20 21:18

不懂,纯支持
头像
linxiaoyu
帖子: 39
注册时间: 2009-05-03 21:09

Re: [四星]写一个脚本,自动找到相关图书和价格

#40

帖子 linxiaoyu » 2010-11-12 22:32

grep 果然强大,围观
GONE WITH THE WIND ~~~
头像
Loop.wu
帖子: 102
注册时间: 2011-03-28 11:04
来自: 我躲着,你来找
联系:

Re: [四星]写一个脚本,自动找到相关图书和价格

#41

帖子 Loop.wu » 2011-04-06 14:21

大家的shell编程很猛阿
cxxgtxy
帖子: 9
注册时间: 2012-05-10 22:17

Re: [四星]写一个脚本,自动找到相关图书和价格

#42

帖子 cxxgtxy » 2013-03-16 15:01

都是大牛啊啊啊。。。。。
jkl51310
帖子: 2
注册时间: 2011-03-10 22:01

Re: [四星]写一个脚本,自动找到相关图书和价格

#43

帖子 jkl51310 » 2013-03-27 21:59

mark……想学个脚本
头像
月下叹逍遥
论坛版主
帖子: 33994
注册时间: 2010-10-07 14:23
系统: Archdows10
来自: 某系某星某洲某国某省某市
联系:

Re: [四星]写一个脚本,自动找到相关图书和价格

#44

帖子 月下叹逍遥 » 2016-05-09 2:21

从京东查询 :em01
已知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])
浮生七十今三十,从此凄惶未可知
回复