简单爬虫---寻找同时卖不同商品的淘宝店铺

这个简单的爬虫是为了满足个人的一个需求:有时候在淘宝时,买一些组合的东西(比如一次买耳机头跟电焊,需要分开买),或者不同的吃的零食,总是出现在不同的店里。价格倒是其次,只是不喜欢反复的收包裹,那么这个爬虫可以找到这些都有得卖的店铺,至少可以帮我试一下有没有在一家店买的可能。

实现上非常简单,也不需要登录,直接通过url请求。首先是输入需要的模块

import requests
from bs4 import BeautifulSoup
import re
import time
import web browser
import threading

接下来对于每个物品寻找店铺的函数

#pages_searched决定对一个物品我们检索多少页
def onepagesearch(link, pages_searched=80):    
  set_userid = set()    
  for i in range(pages_searched):        
    #直接通过改变44i的值起到翻页的作用,可以看一下下一页后url的变化
    link_ini = link + str(44*i)        
    try:            
      html_ini = requests.get(link_ini)            
      soup_ini = BeautifulSoup(html_ini.text)      
      #找到店铺id                  
      b = soup_ini.find_all('script')[4]                       
      c = b.string.strip()            
      pattern = re.compile("\"user_id\"\:\"(\d*)\"")
      result = pattern.findall(c)            
      if result!=None:                
        list_userid_i=[int(ss) for ss in result]                 
        #将每一页找到的id都放入集合                
        set_userid_i = set(list_userid_i)                
        set_userid = set_userid|set_userid_i            
      else:                
        print "!!!!"        
    except:            
      print "open url error"    
  #最终返回这个物品对应的前pages_searched页的店铺id
  return set_userid

主要部分就已经完成了,为了用两个线程去找两个物品,只需要定义如下类就可以了,

class MyThread(threading.Thread):    
  def __init__(self, thread_name, target, args):        
    super(MyThread, self).__init__()        
    self.name=thread_name        
    self.target = target        
    self.args = args        
    self.store = set()    
  def run(self) :        
    self.store = self.target(self.args)

其中线程的run函数执行的target函数就是我们已经完成的onepagesearch,接下来就是主函数部分

def main():    
  #需要用户输入两个物品,编码格式需要注意
  name1 = raw_input(u"input thing's name 1")    
  name1 = name1.encode('utf8')    
  name2 = raw_input(u"input thing's name 2")    
  name2 = name2.encode('utf8')    
  start = time.clock() 
  #分别是两个物品对应的两个base link ,传入后需要跟第几页拼起来 
  link1_pre = u'http://s.taobao.com/search?q='+name1+u'&bcoffset=-4&s='    
  link2_pre = u'http://s.taobao.com/search?q='+name2+u'&bcoffset=-4&s='  
  #为了直接返回店铺地址,定义一个店铺的base link之后跟店铺id拼起来即可访问
  store_pre = u'store.taobao.com/shop/view_shop.htm?user_number_id='  
  #两个物品,创建两个线程  
  thread1 = MyThread("Thread-1", onepagesearch, link1_pre,)    
  thread2 = MyThread("Thread-2", onepagesearch, link2_pre,)    
  #start threading.run    
  thread1.start()    
  thread2.start()    
  thread1.join()    
  thread2.join() 
  #返回两个物品分别得到的店铺id,再求交集即为同时售卖的店铺   
  goods1 = thread1.store    
  goods2 = thread2.store    
  good_inter = set.intersection(goods1, goods2)    
  end = time.clock()    
  print "search is done, cost %f " %(end-start)    
  list_good = list(good_inter)    
  list_shop = [store_pre+str(x) for x in list_good]    
  if len(list_shop)!=0:   
    #返回共有的店铺,同时用webbrowser打开第一个     
    for shop in list_shop:              
      print shop        
    to_open = 'http://'+list_shop[0]               
    webbrowser.open_new_tab(to_open)    
   else:        
     print u'Did not find any shop incommon

'if __name__=='__main__':   
   main()

我们测试一下

1.jpg

同时打开第一个店铺

2.jpg

OK了!
本人是土法土搞,如果看到的人有什么提高效率或者更优的建议,可以告诉我,3Q for reading, 也祝中秋节快乐!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容