展开全部

本编博客是关于爬取天猫店铺中指定店铺的所有商品基础信息的爬虫,爬虫运行只需要输入相应店32313133353236313431303231363533e78988e69d8331333365636562铺的域名名称即可,信息将以csv表格的形式保存,可以单店爬取也可以增加一个循环进行同时爬取。

源码展示

首先还是完整代码展示,后面会分解每个函数的意义。

# -*- coding: utf-8 -*-

import requests

import json

import csv

import random

import re

from datetime import datetime

import time

class TM_producs(object):

def __init__(self,storename):

self.storename = storename

self.url = ''.format(storename)

self.headers = {

"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 "

"(KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"

}

datenum = datetime.now().strftime('%Y%m%d%H%M')

self.filename = '{}_{}.csv'.format(self.storename, datenum)

self.get_file()

def get_file(self):

'''创建一个含有标题的表格'''

title = ['item_id','price','quantity','sold','title','totalSoldQuantity','url','img']

with open(self.filename,'w',newline='') as f:

writer = csv.DictWriter(f,fieldnames=title)

writer.writeheader()

return

def get_totalpage(self):

'''提取总页码数'''

num = random.randint(83739921,87739530)

endurl = '/shop/shop_auction_search.do?sort=s&p=1&page_size=12&from=h5&ajson=1&_tm_source=tmallsearch&callback=jsonp_{}'

url = self.url + endurl.format(num)

html = requests.get(url,headers=self.headers).text

infos = re.findall('\(({.*})\)',html)[0]

infos = json.loads(infos)

totalpage = infos.get('total_page')

return int(totalpage)

def get_products(self,page):

'''提取单页商品列表'''

num = random.randint(83739921, 87739530)

endurl = '/shop/shop_auction_search.do?sort=s&p={}&page_size=12&from=h5&ajson=1&_tm_source=tmallsearch&callback=jsonp_{}'

url = self.url + endurl.format(page,num)

html = requests.get(url, headers=self.headers).text

infos = re.findall('\(({.*})\)', html)[0]

infos = json.loads(infos)

products = infos.get('items')

title = ['item_id', 'price', 'quantity', 'sold', 'title', 'totalSoldQuantity', 'url', 'img']

with open(self.filename, 'a', newline='') as f:

writer = csv.DictWriter(f, fieldnames=title)

writer.writerows(products)

def main(self):

'''循环爬取所有页面宝贝'''

total_page = self.get_totalpage()

for i in range(1,total_page+1):

self.get_products(i)

print('总计{}页商品,已经提取第{}页'.format(total_page,i))

time.sleep(1+random.random())

if __name__ == '__main__':

storename = 'uniqlo'

tm = TM_producs(storename)

tm.main()

上面代码是选择了优衣库作为测试店铺,直接输入优衣库店铺的域名中关键词即可,最终表格会按照店铺名称和时间名词。

代码解读

导入库说明requests 库不用多数,爬取网页的主要库

json 库是用来解析 json 格式的数据的,也就是 Python 中的字典格式

csv 库是用来创建 csv 表格和保存信息的

random 库是用来生成一个随机数的,这个代码中用到了两次,第一次是生成一个随机数据去获取最新的网页信息而不是缓存信息,第二次是随机一个时间,来减缓爬虫速度

re 库是正则,主要用来提取信息

datetime 和 time 都是时间库,前者一般用来生成当前时间字符串,后者本爬虫使用设置延迟时间

爬虫思路

首先通过分析手机端天猫店铺所有商品的网页,可以发现每次下滑一页都有一个 js 被加载,这个 js 的规律可以总结一下;

通过分析可以发现每次请求 js 都可以得到一个关键信息,那就是 total_page 这个参数,这也一想就能猜到,就是当前店铺的总页码数,所以可以先取得这个数字,然后使用循环爬取全店商品;

每一页有24个商品,而请求得到的是一个类似于 json 格式的网页信息,但是并非是直接的 json,所以可以用正则表达式提取符合 json 格式的部分留用;

将每一页的信息保存到 csv 表格中,可以直接使用 csv 库的字典存储方式,非常方便;

得到了单页的信息,也得到了总页码数,只需要一个循环就可以爬取全店的商品了。

构造爬虫类

def __init__(self,storename):

self.storename = storename

self.url = '.format(storename)

self.headers = {

"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 "

"(KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"

}

datenum = datetime.now().strftime('%Y%m%d%H%M')

self.filename = '{}_{}.csv'.format(self.storename, datenum)

self.get_file()

上面代码依次完成以下操作:

首先整个爬虫是写成了一个类,在初始化类的时候需要传递一个参数,这个参数就是店铺的名称。

然后构造出店铺的所有商品页面的前半部分,这部分都是不会变的

接着设置一个请求头

按照当前时间生成一个以时间为依据的字符串,用来给文件命名,然后赋值给文件名称,确定保存文件的名称

最后一句是在类生成的时候就运行这个函数,及生成一个带有标题的表格,后面会说道这个函数的具体含义

python爬取网店数据_如何爬虫天猫店铺数据python相关推荐

  1. python爬取网易云音乐_我用Python爬取了网易云音乐

    原标题:我用Python爬取了网易云音乐 来源:别动我的猫尾巴 headers需要进行修改,headers设置不对会被屏蔽导致爬取不成功.一个headers用久了也会爬取不成功 代码如下: impor ...

  2. python 爬取企业注册信息_读书笔记(十)——python简单爬取企查查网企业信息,并以excel格式存储...

    今天这个小爬虫是应朋友,帮忙写的一个简单的爬虫,目的是爬取企查查这个网站的企业信息. 编程最终要的就是搭建编程环境,这里我们的编程环境是: python3.6 BeautifulSoup模块 lxml ...

  3. python爬取网易云音乐_Python 从零开始爬虫(七)——实战:网易云音乐评论爬取(附加密算法)...

    前言 某宝评论区已经成功爬取了,jd的也是差不多的方法,说实话也没什么好玩的,我是看上它们分析简单,又没加密才拿来试手的.如果真的要看些有趣的评论的话,我会选择网易云音乐,里面汇聚了哲学家,小说家,s ...

  4. python爬取素材图片代码_一篇文章教会你利用Python网络爬虫获取素材图片

    [一.项目背景] 在素材网想找到合适图片需要一页一页往下翻,现在学会python就可以用程序把所有图片保存下来,慢慢挑选合适的图片. [二.项目目标] 1.根据给定的网址获取网页源代码. 2.利用正则 ...

  5. python爬取网店数据_Python爬虫实现抓取京东店铺信息及下载图片功能示例

    本文实例讲述了Python爬虫实现抓取京东店铺信息及下载图片功能.分享给大家供大家参考,具体如下: 这个是抓取信息的 from bs4 import BeautifulSoup import requ ...

  6. python爬取网易云音乐_爬取网易云音乐评论(一)——用python执行JS脚本

    抓包分析 可以发现网页是post请求,表单数据有两个参数params和encSecKey,应该是经过js加密所得 因此在 Initiator 栏里找到对应的js,也就是core...js,点击打开查看 ...

  7. python爬取智联招聘_【原创源码】python 爬取智联招聘

    [Python] 纯文本查看 复制代码from selenium import webdriver from selenium.webdriver.chrome.options import Opti ...

  8. [爬虫]Python爬取网易云音乐搜索并下载歌曲!

    Python爬取网易云音乐搜索并下载歌曲! 文章目录 Python爬取网易云音乐搜索并下载歌曲! 1.准备工作 2."实地"观察 3.开始码代码! 4.搜索并下载 结束语 1.准备 ...

  9. python爬取网易云音乐排行榜数据

    python爬取网易云音乐排行榜歌曲及评论 网易云音乐排行榜歌曲及评论爬取 主要注意问题:selenium 模拟登录.iframe标签定位.页面元素提取. 在利用selenium定位元素并取值的过程中 ...

最新文章

  1. php-fpm开启报错-ERROR: An another FPM instance seems to already listen on /tmp/php-cgi.sock
  2. select * from table with(nolock)
  3. poj1063 解题报告(poj 1063 analysis report)
  4. Visual Studio Code设置断点时出现Unverified breakpoint该咋办
  5. 《Kubernetes权威指南第2版》学习(二)一个简单的例子
  6. 关于TCP/IP协议及网络通信相关问题
  7. 问题二十七:ray traing中的positionable camera
  8. Yii2中Component和Object的使用方法
  9. 编译OpenJDK12:atomic.hpp: fatal error C1189: size_t is not WORD_SIZE(换了VS2017编译)
  10. Linux命令 - unzip命令
  11. gazebo 模型导入
  12. 途牛VS去哪儿VS去啊旅游产品竞品分析报告
  13. 教你如何进行嵌入式网络模块的联网操作
  14. Excel中如何将一个Excel工作表的数据按一列的关键字拆分成多个工作表
  15. Gartner:新兴技术成熟度曲线2018(中文—历年)
  16. 士兵杀敌(coduck)
  17. PHP网站地图生成类
  18. ajax提交表单序列化不进请求,表单序列化+ajax跨域提交
  19. windows CE 4.2、5.0、6.0下载地址
  20. 【每日一句shell】grep匹配符合多个条件的行

热门文章

  1. 计算机专业培训策划案,电脑培训策划书
  2. Master-MatPyon:学习历程
  3. 用小米平板,如何看小度路由器所连接的移动硬盘上的视频
  4. CSS、HTML补充
  5. 快手怎么引流做CPA?如何在快手直播上截流操作CPA项目
  6. uniapp实现微信登录或者QQ登录
  7. 微软2013校园招聘笔试题
  8. 计算机组成与原理课程视频在线,《电子科技大学计算机组成原理视频课程42讲全 》...
  9. 好消息,个人也可以申请支付宝支付了
  10. OpenGL中常用的 GLUT 函数