python实现爬取千万淘宝商品的方法

   本文实例讲述了python实现爬取千万淘宝商品的方法。分享给大家供大家参考。具体实现方法如下:

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98

import time
import leveldb
from urllib.parse import quote_plus
import re
import json
import itertools
import sys
import requests
from queue import Queue
from threading import Thread
URL_BASE = 'http://s.m.taobao.com/search?q={}&n=200&m=api4h5&style=list&page={}'
def url_get(url):
# print('GET ' + url)
header = dict()
header['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
header['Accept-Encoding'] = 'gzip,deflate,sdch'
header['Accept-Language'] = 'en-US,en;q=0.8'
header['Connection'] = 'keep-alive'
header['DNT'] = '1'
#header['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36'
header['User-Agent'] = 'Mozilla/12.0 (compatible; MSIE 8.0; Windows NT)'
return requests.get(url, timeout = 5, headers = header).text
def item_thread(cate_queue, db_cate, db_item):
while True:
try:
cate = cate_queue.get()
post_exist = True
try:
state = db_cate.Get(cate.encode('utf-8'))
if state != b'OK': post_exist = False
except:
post_exist = False
if post_exist == True:
print('cate-{}: {} already exists ... Ignore'.format(cate, title))
continue
db_cate.Put(cate.encode('utf-8'), b'crawling')
for item_page in itertools.count(1):
url = URL_BASE.format(quote_plus(cate), item_page)
for tr in range(5):
try:
items_obj = json.loads(url_get(url))
break
except KeyboardInterrupt:
quit()
except Exception as e:
if tr == 4: raise e
if len(items_obj['listItem']) == 0: break
for item in items_obj['listItem']:
item_obj = dict(
_id = int(item['itemNumId']),
name = item['name'],
price = float(item['price']),
query = cate,
category = int(item['category']) if item['category'] != '' else 0,
nick = item['nick'],
area = item['area'])
db_item.Put(str(item_obj['_id']).encode('utf-8'),
json.dumps(item_obj, ensure_ascii = False).encode('utf-8'))
print('Get {} items from {}: {}'.format(len(items_obj['listItem']), cate, item_page))
if 'nav' in items_obj:
for na in items_obj['nav']['navCatList']:
try:
db_cate.Get(na['name'].encode('utf-8'))
except:
db_cate.Put(na['name'].encode('utf-8'), b'waiting')
db_cate.Put(cate.encode('utf-8'), b'OK')
print(cate, 'OK')
except KeyboardInterrupt:
break
except Exception as e:
print('An {} exception occured'.format(e))
def cate_thread(cate_queue, db_cate):
while True:
try:
for key, value in db_cate.RangeIter():
if value != b'OK':
print('CateThread: put {} into queue'.format(key.decode('utf-8')))
cate_queue.put(key.decode('utf-8'))
time.sleep(10)
except KeyboardInterrupt:
break
except Exception as e:
print('CateThread: {}'.format(e))
if __name__ == '__main__':
db_cate = leveldb.LevelDB('./taobao-cate')
db_item = leveldb.LevelDB('./taobao-item')
orig_cate = '正装'
try:
db_cate.Get(orig_cate.encode('utf-8'))
except:
db_cate.Put(orig_cate.encode('utf-8'), b'waiting')
cate_queue = Queue(maxsize = 1000)
cate_th = Thread(target = cate_thread, args = (cate_queue, db_cate))
cate_th.start()
item_th = [Thread(target = item_thread, args = (cate_queue, db_cate, db_item)) for _ in range(5)]
for item_t in item_th:
item_t.start()
cate_th.join()

  希望本文所述对大家的Python程序设计有所帮助。

时间: 2024-10-02 15:44:57

python实现爬取千万淘宝商品的方法的相关文章

python爬取淘宝商品信息并加入购物车

先说一下最终要达到的效果:谷歌浏览器登陆淘宝后,运行python项目,将任意任意淘宝商品的链接传入,并手动选择商品属性,输出其价格与剩余库存,然后选择购买数,自动加入购物车. 在开始爬取淘宝链接之前,咱么要先做一些准备工作,我项目中使用的是 python2.7 ,开发与运行环境都是win10,浏览器是64位chrome 59.0.3.由于淘宝的模拟登陆涉及到一些复杂的UA码算法以及滑块登陆验证,能力有限,为了图省事就使用浏览器手动登录淘宝然后python获取生成的cookie的方式来爬取登录后的

PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例_php实例

说起来做这个功能还真是一时好奇.前段时间在做一个淘客网站的时候,想到是否能抓取到淘宝商品的买家秀呢?经过一番折腾发现,淘宝商品用户评价信息是通过Ajax来调取的,通过嗅探网址发现,评论数据的请求接口是: https://rate.tmall.com/list_detail_rate.htm?itemId=524394294771&spuId=341564036&sellerId=100414600&order=3&currentPage=1&append=0&

求助,python 解析爬取的网页源码中的json部分

问题描述 求助,python 解析爬取的网页源码中的json部分 爬下来的网页源码有一部分是这样的 : 中间那一部分是json吧?要怎么才能解析成像浏览器那样的好继续抓取所要的信息? 说部分是因为有另外一些是正常的html,就中间这一部分想要的信息就这样两行超级长的延伸...也使用过json.load()来解析,不想显示错误"没有可以解析的json对象". 这两行中还有一部分"}u0026nicku003d${nick}u0026rnu003d${rn}u0026stats.

求 商品规格选择-求JQ或JS仿淘宝商品详情选择规格颜色等功能

问题描述 求JQ或JS仿淘宝商品详情选择规格颜色等功能 选择要求:有几个属性,如 尺寸和颜色,尺寸:M.L.XL.XXL 等,颜色:黑色.白色.黄色.红色等,其每个属性都有关联,如 首选M,颜色除黑色或其他外都能选择:如首选 黄色,尺寸除XXL或其他外都能选择. 自己写的有问题.代码放上一部分.已生成的数组求值. HTML:↓ <div class="sys_item_spec"> <dl class="clearfix iteminfo_parameter

淘宝新规则下如何有效提升淘宝商品搜索排名

淘宝网规则变化了,地球人都知道.新规则一出台,许多小卖家真是叫苦不迭呀,既然有了新规则了,那就要去了解新规则,面对新规则,利用新规则,而不是一味地埋怨. 我们先来了解下淘宝网商品搜索排名的新规则吧: 1.商品的搜索排名是默认为"人气",也就是说在淘宝的搜索框中输入关键字搜索出来的商品,排名是根据人气商品来排名的,而"人气搜索结果"是综合了"卖家信用.好评率.30 天售出量.宝贝浏览量.收藏人气.宝贝下架时间"等因素根据特定的算法而得出来的.了解这

影响淘宝商品成交转化率的致命因素

关于淘宝商品成交转化率的文章,相信大家看的最多的一定是如何提高转化率.但您知道嘛,一方面在拼命努力提高转化率,另一方面影响转化率的因素这个漏洞有多大?危害有多广?您有关注过?分析过? 其实在淘宝开店卖东西,几乎所有的工作目的无非就是:提高成交转化率(这个观点有点土鳖,但绝对是一针见血的),在切入正题前,请大家先看一张图:   如果您的商品评价详情页有如上图所示的评价内容时,您觉得您的转化率会如何? 众所周知,在淘宝上购物的用户(尤其是优质的高等级用户)已经习惯了先看评价内容再决定是否购买,特别是

ASP.NET MVC入门:淘宝商品的搜索和价格筛选

五一前后一直在忙安卓的东西,直到现在终于有机会喘口气了,于是就抽空写了这篇博文,来记录我之前 学习MVC一周后所写的小例子:搜索淘宝商品并对商品进行价格筛选. 先上开始界面: 这 个界面的源码如下: @{ ViewBag.Title = "主页"; } <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"

淘宝商品详情平台化思考与实践

(部份整理自<Detail2.0总体方案-20140818>) 1.现状背景 Detail当前的问题可参见<Detail2.0介绍>(2014年7月),本文不赘述.而Detail新平台的目标是提升协作效率/稳定性/扩展性,倡导商品详情业务归一,能横向复用在其它Detail也能运用在非Detail场景.从产品到研发等各维度均展开梳理和重构,采取模块化.SDK/API等方式来定义协作和扩展机制,并提供合成和分组两种部署模式,以应对创新业务快速多变的需求.并在稳定性和性能方面进行统一封装

仿淘宝商品详情页上拉弹出新ViewController

新项目就要开始做了,里面有购物那块,就试着先把淘宝商品详情页的效果做了一下. 1.需求 1.第一次上拉时,A视图拉到一定距离将视图B从底部弹出,A视图也向上 2.显示B视图时下拉时,有刷新效果,之后将A回到原处,B向下 3.A视图再次上拉时,能看到B视图,拉到一定距离时,和1一样A.B向上 2.思路 刚看到时,我是想到我们小区宝2.0的登录弹出效果,想着A向上滑动一定距离时A.B向上,B向下滑动时让A.B向下滑动,实现了之后和小伙伴讨论了一下,发现了一些细节这样是实现不了的,就是A上拉时可以看到