`
f002489
  • 浏览: 273046 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

爬取千万淘宝商品的python脚本

 
阅读更多
importtime
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()
分享到:
评论
1 楼 f002489 2018-03-26  
我用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”

https://www.jianshu.com/p/229229c487d0

相关推荐

    Python实现爬取网络评论与自然语言处理——NLPCA

    在本项目中,我们主要探讨的是如何利用Python进行网络数据抓取,特别是针对Quora平台上的评论内容,以及后续如何运用自然语言处理技术对抓取的数据进行分析和可视化。这是一次结合网络爬虫、文本预处理、机器学习...

    天猫(淘宝)数据爬取源码(可直接使用).zip

    tmall.py可能是实现爬虫功能的Python脚本,tmall.TXT可能是爬取到的原始数据文本文件,而说明.TXT则可能包含关于如何使用此爬虫的详细说明,包括如何输入商品名称、数据条数和页面数等参数。 6. **数据存储与分析**...

    Python爬取淘宝热卖商品并可视化分析

    在本项目"Python爬取淘宝热卖商品并可视化分析"中,我们将深入探讨如何利用Python进行网络爬虫,抓取淘宝商品数据,并通过数据分析和可视化技术揭示商品销售的潜在规律。以下是你需要掌握的关键知识点: 1. **...

    基于Python的Scrapy爬虫实战教程系列:爬取腾讯百度淘宝知乎等网站内容源码

    项目包含35个文件,涵盖22个Python脚本、6个HTML文档、2个PNG图片、1个Git属性文件、1个Git忽略文件、1个Markdown文件、1个文本文件和1个配置文件。教程适合初学者,帮助大家从零开始掌握爬取各大网站内容源码的技能...

    淘宝商品信息爬虫及数据存储脚本

    这个Python脚本用于在淘宝网站上进行商品信息的爬取,并将所得数据存储到MySQL数据库中。以下是脚本的主要功能和步骤: 1. **导入库:** - 脚本开始时导入了必要的库,包括`pymysql`用于MySQL数据库操作,`...

    python3爬取淘宝信息代码分析

    在本篇文档中,我们将深入分析使用Python3语言结合requests库和正则表达式来爬取淘宝网页信息的过程。请注意,爬取他人网站数据可能涉及到法律和道德问题,因此在实际操作前务必确保遵守相关法律法规以及网站的爬虫...

    天猫商品评价_爬虫_python_TmallUS_淘宝_淘宝C_

    描述中的“爬取淘宝评论,包括代码和爬取后的数据。解压即可,python代码”提示我们,这个压缩包包含两个主要部分:实际的Python爬虫代码和已经爬取到的数据。这暗示我们可以期待看到一个Python脚本(可能用于自动化...

    python爬虫例子,对新手比较友好,主要爬取淘宝、天猫、微信、微信读书、豆瓣、QQ等网站。

    解锁网络数据的宝藏:Python爬虫工具与教程集合 一、探索网络信息的无限宝藏 在互联网的海洋中,蕴藏着海量的有价值信息。如何合法、高效地获取这些信息?Python爬虫工具与教程为您揭开这一神秘面纱。通过这些资源...

    python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程

    本教程主要介绍如何利用Python编写一个爬虫脚本,该脚本能够实现一键爬取淘宝或天猫网站上某个宝贝的主图、颜色图以及详情图。以下是根据教程内容整理出的关键知识点。 ### 关键知识点: 1. **Python网络请求库**...

    基于Python的多平台爬虫与数据采集设计源码

    项目功能包括爬取豆瓣电影Top250、斗鱼平台JSON数据、美女图片、淘宝网数据、有缘网相亲人信息、红娘网分布式爬取及Redis存储、Selenium模拟登录、多点商城数据爬取、Django接口开发、微信公众号文章采集、微信群...

    基于Python的多样化网络爬虫设计与源码实现

    项目实现了对豆瓣电影top250、斗鱼、淘宝、有缘网、红娘网、多点商城、微信公众号、微信群分享文章等多源数据的爬取,并运用Selenium、CrawlSpider、Redis等技术进行数据抓取、分布式存储和模拟登录操作,展示了丰富...

    生意参谋-市场大盘,市场排行爬虫脚本,采用pyppeteer+PIL方式处理数值图片问题,人工登录,并将爬取结果保存为csv文件

    生意参谋-市场大盘,市场排行爬虫脚本,采用pyppeteer+PIL方式处理数值图片问题,人工登录,并将爬取结果保存为csv文件 脚本截取: import asyncio from pyppeteer import launch from PIL import Image import ...

    python实现二维码扫码自动登录淘宝

    在本文中,我们将探讨如何使用Python来实现一个自动登录淘宝的脚本,特别是通过二维码扫码的方式。这个功能在处理需要持续登录的项目时非常有用,比如自动抓取淘宝联盟的数据。我们将关注以下知识点: 1. **Python...

    python爬虫获取淘宝天猫商品详细参数

    通过以上知识点的总结,我们不仅了解了如何使用Python爬虫获取淘宝天猫商品的详细参数,还对爬虫开发的整个流程有了全面的认识。从基础概念到实践操作,再到数据处理、维护更新以及相关的法律法规,这些知识点为进行...

    基于Python的电商网站多平台数据爬虫设计源码

    该项目为Python编写的电商网站多平台数据爬虫设计源码,包含378个文件,涵盖128个Python脚本、75个GIF图片、41个Markdown文档、27个JavaScript文件、22个CSV文件、18个JSON文件、18个HTML文件、10个文本文件、10个...

    淘宝商品爬虫, selenium破解滑块验证(目前可用)

    在这个项目中,Python被用来编写爬虫脚本,用于自动化地访问淘宝网站、抓取商品信息。 网络爬虫是通过模拟浏览器行为,自动遍历和解析网页的程序。爬虫的基本流程包括发送HTTP请求、接收服务器响应、解析HTML内容...

    Python-taobaospider淘宝热搜词商品信息爬虫

    **Python-taobaospider淘宝热搜词商品信息爬虫** 这个项目是一个利用Python语言编写的Web爬虫程序,专门用于抓取淘宝网站上的热搜词及其对应的商品信息。它基于Python 2.7版本,这是Python的一个重要里程碑版本,...

    淘宝、京东、拼多多商品店铺基础信息爬虫 Selenium+Python技术栈.zip

    这个分享包涵了我开发的Python爬虫工具项目,主要用于合法爬取某些网页信息。以下是主要内容: 源代码:包括Python代码和相关脚本。这些代码展示了如何使用Python进行网页抓取、解析和数据提取。 项目文件:除了...

Global site tag (gtag.js) - Google Analytics