吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9664|回复: 50
收起左侧

[Python 转载] 【爬虫】亚马逊畅销数据爬取Demo

  [复制链接]
Test_dada 发表于 2020-11-27 15:12
本帖最后由 Test_dada 于 2021-1-20 10:06 编辑

前言:
本贴仅做学习交流,请勿用于商业牟利
如有侵权,联系处理
觉得有用的点赞下,谢谢


数据准备:
先创建表格,路径:C:\Users\Administrator\Desktop\亚马逊畅销数据爬取.xlsx
表格共有四个数据(商品名、图片、星级、销量)

该代码是单线程运行,数据量过多时,会有数据重复的情况
有时间再改造,有能力的小伙伴可改为多线性运行
[Python] 纯文本查看 复制代码
import bs4
import requests
import time
import datetime
from random import random
import xlrd
import re
from xlutils.copy import copy
from pprint import pprint

class Amazon_Demo():
    '''畅销商品抓取Demo'''
    def __init__(self, data_path, num=10):
        self.num = num
        self.data_path = data_path

    def timestamp(self):
        '''当前时间转换为时间戳'''
        now = datetime.datetime.now()
        # print(now.timetuple(), type(now.timetuple()))  # timetuple()返回 struct_time时间元组
        timestamp = time.mktime(now.timetuple())  # mktime()接收时间元组转换为时间戳
        return int(timestamp)

    def urls(self):
        ''' 多页面url汇总
            num: 要爬取的页面数
        '''
        URL = []
        for n in range(1, self.num+1):
            Url = "https://www.amazon.com/s?i=specialty-aps&srs=17938598011&page={0}&language=zh&qid={1}&ref=sr_pg_{0}".format(n,self.timestamp())
            URL.append(Url)
        return URL


    def active_demand(self):
        '''亚马逊最畅销商品信息抓取'''
        n = 1
        srcObj_list = []  # 存放商品信息
        pprint(self.urls())
        for url1 in self.urls():
            print("抓取第%d页中... ..."%n)
            
            # 修改头部信息
            kv =[size=2]{'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}[/size]
            req = requests.get(url1,headers=kv)
            # print("当前头部信息:",req.request.headers)
            # print("响应状态码:",req.status_code)
            time.sleep(random() + 2)  # random() 产生 0 到 1 之间的随机浮点数
            req.encoding="utf-8"
            bs = bs4.BeautifulSoup(req.text,features="lxml")

            obj = bs.find_all("div",{"class":"a-section aok-relative s-image-fixed-height"})    # 图片所在父级
            imgObj=[] # 用于存储img对象
            for s in obj:
                imgObj.append(s.find('img'))
            # pprint(imgObj)

            obj2 = bs.find_all("div",{"class":"a-row a-size-small"})    # 星级、评论数所在父级

            for i,o in zip(obj2,imgObj):
                num = re.findall(r'span aria-label="(.+?)">',str(i))    # 转换HTML格式为str后,正则截取评论数、星级
                srcObj_list.append([o.get("alt"), o.get("src"), num[0], num[1]])
            n += 1
        print("抓取商品信息总数:%d条"%len(srcObj_list))
        return srcObj_list

    def Write(self):
        '''xlrd读取'''
        workbook = xlrd.open_workbook(self.data_path)
        sheetName = workbook.sheet_by_name("aaa")
        nrows = sheetName.nrows  # 当前表格行数
        # print(nrows)

        '''xlrd写入'''
        new_workbook = copy(workbook)  # 将xlrd对象拷贝转化为xlwt对象
        new_worksheet = new_workbook.get_sheet(0)  # 获取转化后工作簿中的第一个表格

        datas = self.active_demand()
        for data in datas:
            new_worksheet.write(nrows, 0, data[0])    # 写入商品名
            new_worksheet.write(nrows, 1, data[1])    # 图片链接
            new_worksheet.write(nrows, 2, data[2])    # 评星
            new_worksheet.write(nrows, 3, data[3])    # 评论数
            nrows += 1
        new_workbook.save(self.data_path)  # 保存工作簿
        print("数据写入成功!")

if __name__ == '__main__':
    file_path = r'C:\Users\Administrator\Desktop\亚马逊畅销数据爬取.xlsx'    # 保存路径
    Amazon_Demo(file_path).Write()

结果
9476983bf44a61a36c530be5d0abb85.png


第44行代码编辑时,自动添加了一些格式代码,不知道怎么去除,小伙伴复制后自行删除那些[size]就可以了
然后就是,爬不出数据时,也是在44行修改成你自己的headers参数就可以了,具体在哪看



DmQ6YU4@45GIX)F4])[H0.png

免费评分

参与人数 4吾爱币 +3 热心值 +3 收起 理由
dghg + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
一只帅祖宗 + 1 热心回复!
yujun。 + 1 + 1 有机会一定学 ,嘿嘿
呆先生 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Test_dada 发表于 2021-1-20 10:08
前面还是会有爬不出数据的情况,所以后面在headers上又添加了一些参数,具体是在第44行替换的

[Python] 纯文本查看 复制代码
 kv = {'Accept': 'image/webp,image/apng,image/*,*/*;q=0.8',
                'Accept-Encoding': 'gzip, deflate, br',
                'Accept-Language': 'zh-CN,zh;q=0.9',
                'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
 楼主| Test_dada 发表于 2021-3-26 11:43
一只帅祖宗 发表于 2021-3-25 16:05
楼主帮我看看这是怎么回事???

1.菜单-运行-cmd 打开命令窗口
2.输入pip list
3.查看xlrd库的版本(我是旧版1.20)
4.如果不是1.20版本,卸载新版,再安装旧版pip install xlrd==1.2.0

原因:xlrd更新到了2.0.1版本,只支持.xls文件,不支持.xlsx。
invzw 发表于 2020-11-27 15:27
大神,能不能做个虾皮电商平台的畅销数据爬取
 楼主| Test_dada 发表于 2020-11-27 15:29
invzw 发表于 2020-11-27 15:27
大神,能不能做个虾皮电商平台的畅销数据爬取

python号称是,只要能看到的就能操作
c77187326 发表于 2020-11-27 15:52
学习下,感谢分享
费路哥尼 发表于 2020-11-27 15:58
学习了  谢谢分享
qw345tyu 发表于 2020-11-27 16:10
很实用,感谢楼主分享代码!
头像被屏蔽
Doerchan 发表于 2020-11-27 16:47
提示: 作者被禁止或删除 内容自动屏蔽
axf 发表于 2020-11-27 17:45
最近在学py
lccasp 发表于 2020-11-27 18:08
我看代码是自己手动定义爬取页数,可以稍微做个获取页码的操作就更好了
BlueZ0514 发表于 2020-11-27 18:33
学习学习,感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-1 08:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表