唯品会数据抓取 | 爬虫

import requests
import re
import json
import time

class WPHSpider(object):
    """
    抓取唯品会列表页产品名称以及图片
    """
    def __init__(self):
        # 伪造请求头
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36",
        }
        # ip代理
        self.proxies = {
            "https:": "https://36.248.129.249:26392",
        }
        self.start_param = {
            "q": "3|29970||",
            "rp": "30073|30079",
        }

    def get_page(self, url, data_for_get):
        response = requests.get(url, params=data_for_get,
                                headers=self.headers, proxies=self.proxies)
        return response.text

    def run(self):
        i = 1
        while True:
            # 指定抓取5页
            if i == 5:
                break
            start_url = "https://category.vip.com/search-2-0-%s.html?q=3|29970||&rp=30073|30079" % i
            # 1.请求列表页
            res_content = self.get_page(start_url, self.start_param)
            # 2.从静态相应中解析出产品id
            com = re.compile(""".*productIds":(.*),"cateName".*""")

            data_by_re = com.findall(res_content)[0][3:-3].split(‘","‘)
            for n, pro_id in enumerate(data_by_re):
                if n == 50:
                    break
                # 3.构造ajax请求所需参数
                query_data = {
                    "service": "product_info",
                    "callback": "categoryMerchandiseInfo1",
                    "productIds": pro_id,
                    "functions": "brandShowName,surprisePrice,pcExtra",
                    "warehouse": "VIP_SH",
                    "mobile_platform": "1",
                    "app_name": "shop_pc",
                    "app_version": "4.0",
                    "mars_cid": "1526974867740_7faa89da4de8a00c3547899d727a48f4",
                    "fdc_area_id": "103103101",
                    "_": "1527053746100",
                }
                # 4.发起请求,获取产品数据
                dest_url = "https://category.vip.com/ajax/mapi.php"
                res_content = self.get_page(dest_url, query_data)
                # 5.解析所需数据
                com_second = re.compile(""".*"data":(.*)""")
                try:
                    temp_dict = com_second.findall(res_content)[0][13:-4]
                    # 6.将json字符串转换成python的字典数据类型
                    temp_dict = json.loads(temp_dict)
                except:
                    pass
                else:
                    # 7.构造文件名,以及获取图片数据源
                    productName = temp_dict["productName"] + ".jpg"
                    smallImage = temp_dict["smallImage"]
                    vipshopPrice = temp_dict["vipshopPrice"]
                    print(productName, smallImage, vipshopPrice)
                i += 1

if __name__ == "__main__":
    wph_spider = WPHSpider()
    wph_spider.run()

# -*- coding: utf-8 -*-
import scrapy
import re
import json
import time

class WphSpiderSpider(scrapy.Spider):
    name = ‘wph_spider‘
    allowed_domains = [‘vip.com‘]
    start_urls = [
        "https://category.vip.com/search-2-0-%s.html?q=3|29970||&rp=30073|30079" % i for i in range(5)]

    def parse(self, response):
        res_content = response.text
        com = re.compile(r""".*productIds":(.*),"cateName".*""")
        data_by_re = com.findall(res_content)[0][3:-3].split(‘","‘)
        for n, pro_id in enumerate(data_by_re):
            query_data = {
                "service": "product_info",
                "callback": "categoryMerchandiseInfo1",
                "productIds": pro_id,
                "functions": "brandShowName,surprisePrice,pcExtra",
                "warehouse": "VIP_SH",
                "mobile_platform": "1",
                "app_name": "shop_pc",
                "app_version": "4.0",
                "mars_cid": "1526974867740_7faa89da4de8a00c3547899d727a48f4",
                "fdc_area_id": "103103101",
            }
            param = ""
            i = 1
            for key,value in query_data.items():
                if i == 1:
                    param01 = key + "=" + value
                else:
                    param01 = "&" + key + "=" + value
                param += param01
                i += 1
            temp_url = "https://category.vip.com/ajax/mapi.php?" + param
            yield scrapy.Request(temp_url, callback=self.parse_detail)

    def parse_detail(self, response):
        com_second = re.compile(r""".*"data":(.*)""")

        temp_dict = com_second.findall(response.text)[0][13:-4]
        temp_dict = json.loads(temp_dict)

        productName = temp_dict["productName"] + ".jpg"
        smallImage = temp_dict["smallImage"]
        vipshopPrice = temp_dict["vipshopPrice"]
        with open("data.json", "a+") as f:
            f.write(json.dumps({
                    "productName": productName,
                    "smallImage": smallImage,
                    "vipshopPrice": vipshopPrice,
                }, ensure_ascii=False))
        print(productName, smallImage, vipshopPrice)

scrapy实现抓取

原文地址:https://www.cnblogs.com/pymkl/p/9089780.html

时间: 2024-10-11 19:09:51

唯品会数据抓取 | 爬虫的相关文章

python&php数据抓取、爬虫分析与中介,有网址案例

最近在做一个网络爬虫程序,后台使用python不定时去抓取数据,前台使用php进行展示 网站是:http://se.dianfenxiang.com python&php数据抓取.爬虫分析与中介,有网址案例,布布扣,bubuko.com

实现多进程爬虫的数据抓取

要实现多进程爬虫的数据抓取,要用到库multiprocessing并导入Pool: from multiprocessing import Pool 接着导入进程池 pool = Pool(processes = 4) #processes后接打开进程的数,与电脑核数有关,不加即自动分配.pool.map(get_all_links_from,channel_list.split()) 所有的程序会被放到进程池Pool()中并分配CPU. 此处用到了map函数,map函数会根据提供的函数对指定序

Python 爬虫工程师必学 App数据抓取实战

第1章 课程介绍介绍课程目标.通过课程能学习到的内容.学会这些技能能做什么,对公司业务有哪些帮助,对个人有哪些帮助.介绍目前app数据抓取有哪些困难,面临的挑战,本实战课程会利用哪些工具来解决这些问题,以及本实战课程的特点 ... 1-1 python爬虫工程师必备技能--App数据抓取实战课程导学第2章 windows下搭建开发环境介绍项目开发需要安装的开发软件,讲解了安卓模拟器对比以及夜神安卓模拟器安装.介绍.简单使用和Genymotion安卓模拟器简单分析 介绍App应用抓包工具对比以及f

爬虫---selenium动态网页数据抓取

动态网页数据抓取 什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面.因为传统的在传输数据格式方面,使用的是XML语法.因此叫做AJAX,其实现在数据交互基本上都是使用JSON.使用AJAX加载的数据,即使使用了JS,将数

第四章爬虫进阶之动态网页数据抓取

动态网页数据抓取 什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面.因为传统的在传输数据格式方面,使用的是XML语法.因此叫做AJAX,其实现在数据交互基本上都是使用JSON.使用AJAX加载的数据,即使使用了JS,将数

Python爬虫工程师必学——App数据抓取实战

Python爬虫工程师必学 App数据抓取实战 爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统数据抓取.主要讲解如何用python实现App数据抓取 数据去重又称重复数据删除,是指在一个数字文件集合中,找出重复的数据并将其删除,只保存唯一的数据单元.数据去重可以有效避免资源的浪费,所以数据去重至关重要 数据去重 数据去重可以从两个节点入手:一个是URL去重.即直接筛选掉重复的URL:另一个是数据库去重.即利用数据库的一些特性筛选重复的数据. def process_spider_

Python爬虫--2019大学排名数据抓取

Python爬虫--2019大学排名数据抓取 准备工作 输入:大学排名URL连接 输出:大学排名信息屏幕输出 所需要用到的库:requests,bs4 思路 获取网页信息 提取网页中的内容并放到数据结构中 利用数据结构展示并输出结果 程序设计 定义函数getHTMLText()获取网页信息 定义函数UnivList()放入数据结构 定义函数printUnivList()输出到屏幕 总体而言: 写出需要自定义的函数,制作出总体的框架 写出主函数框架,实现功能 最后调用函数 步骤 查看url源代码

python爬虫数据抓取

概要:利用python进行web数据抓取简单方法和实现. 1.python进行网页数据抓取有两种方式:一种是直接依据url链接来拼接使用get方法得到内容,一种是构建post请求改变对应参数来获得web返回的内容. 一.第一种方法通常用来获取静态页面内容,比如豆瓣电影内容分类下动画对应的链接: http://www.douban.com/tag/%E5%8A%A8%E7%94%BB/?focus=movie     纪录片对应的链接: http://www.douban.com/tag/%E7%

为何大量网站不能抓取?爬虫突破封禁的6种常见方法

在互联网上进行自动数据采集(抓取)这件事和互联网存在的时间差不多一样长.今天大众好像更倾向于用“网络数据采集”,有时会把网络数据采集程序称为网络机器人(bots).最常用的方法是写一个自动化程序向网络服务器请求数据(通常是用 HTML 表单或其他网页文件),然后对数据进行解析,提取需要的信息. 本文假定读者已经了解如何用代码来抓取一个远程的 URL,并具备表单如何提交及 JavaScript 在浏览器如何运行的机制.想更多了解网络数据采集基础知识,可以参考文后的资料. 在采集网站的时会遇到一些比