最新python爬虫爬取国外亚马逊商品分类里的所有商品标题,图片,介绍和价格

亚马逊某个分类商品的页面
在这里插入图片描述

  1. 一开始肯定就是只试试这一个页面,看看能不能请求到
  2. 刚开始不知道反爬做的好不好,就简单的加个User-Agent,果然不行,爬到的网页是让输入验证码的网页。
  3. 然后就是用session, 再加上cookie,咦!竟然成功爬到了。
  4. 再就是分析页面链接了,进行分页,发现只改个url就好了在这里插入图片描述
    i 为for循环的数字
“https://www.amazon.com/s?k=anime+figure+one+piece&page=+ i
  1. 改完开始分页爬取。咦!竟然还能爬到,发现原来是点击下一页的时候cookie一点都不变。于是就拿到了所有商品的url.
    代码
import requests
import json
from lxml import etreedef load_cookies():cookie_json = {}try:with open('export.json', 'r') as cookies_file:cookie_json = json.load(cookies_file)except:print("Json load failed")finally:return cookie_jsondef main():page_list = []for i in range(1, 8):agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"headers = {"HOST": "www.amazon.com/s?k=anime+figure+one+piece","Referer": "https://www.amazon.com/s?k=anime+figure+one+piece","User-Agent": agent}session = requests.session()session.headers = headersrequests.utils.add_dict_to_cookiejar(session.cookies, load_cookies())url = "https://www.amazon.com/s?k=anime+figure+one+piece&page=%d" % iresponse = session.get(url)print(response.text[:300])# with open("test.html", "wb") as f:#     f.write(response.text.encode('utf-8'))page_text = response.texttree = etree.HTML(page_text)a_list = tree.xpath('//a[@class="a-link-normal a-text-normal"]/@href')# print(a_list)#for j in a_list:page_url = "https://www.amazon.com" + jpage_list.append(page_url)print("Done")print(page_list)for k in page_list:with open("page02.txt", "a+") as f:f.write(k + "\r")if __name__ == '__main__':main()

另外coookie封装到了一个cookie.py文件里,以下cookie有删改

import jsondef save_cookies(cookies):cookies_file = 'export.json'with open(cookies_file, 'w') as f:json.dump(cookies, f)def main():cookies = {"ad-privacy": "0","ad-id": "A5d94GSIhp6aw774YK1k","i18n-prefs": "USD","ubid-main": "138-2864646","session-id-time": "20887201l","sst-main": "Sst1|PQHBhLoYbd9ZEWfvYwULGppMCd6ESJYxmWAC3tFvsK_7-FgrCJtViwGLNnJcPk6NS08WtWl7f_Ng7tElRchY70dGzOfHe6LfeLVA2EvS_KTJUFbqiKQUt4xJcjOsog_081jnWYQRp5lAFHerRS0K30zO4KWlaGuxYf-GlWHrIlX0DCB0hiuS4F69FaHInbcKlPZphULojbSs4y3YC_Z2098BiZK5mzna84daFvmQk7GS1uIEV9BJ-7zXSaIE1i0RnRBqEDqCw","sess-at-main": "7B9/7TbljVmxe9FQP8pj4/TirM4hXdoh0io=","at-main": "Atza|IwEBICsAvrvpljvBn6U0aVHZtVAdHNTj8I9XMXpj0_akGclan8n4it62oe4MadfnSheGBfJeVJwRmrV41ZbllH48hNM32FGo4DJGoeXE01gDei-_2PGNH3jKU79B8rzg8MaHRootDMSwFmj4vNmPtnvl6qrbfZoPSmey12IuWq9ijSx3MuCbpJ2wt4Sp7ixf7jWHW6VfaZ849AJkOBDonSHp9o","sp-cdn": "L5Z:CN","session-id": "141-56579-5761416","x-main": "2XkJe2ehs13TDTsRlELJt12FINPkJSfDKLuc5XjGgy2akeyGa45?wYKN4wcIC","session-token": "HfpLyDT70a2q+Ktd9sYUopKOKUeQndXMlbDcwP8sQNGA/ZeUA9ZNGNXOPRvXV8E6pUjeI7j/RR9iDCr5S7W0sRLmHT27PAvbN3TXsyaLvvPhsn4e3hUvhgdJn/xK/BfioKniukounAKZnYZLNcGf44ZiX8sRfdIjOiOx9GvAvl+hnPfJmWi/l73tqO6/G+PPf8uc0vq7Xubsgw2SuSXzqwq0gHEtE6HcbA6AeyyE59DCuH+CdV3p2mVSxUcvmF+ToO6vewLuMl1Omfc+tQ==","lc-main": "en_US",# "csm-hit": "tb:s-YM0DR0KTNG964PT0RMS0|1627973759639&t:1627973760082&adb:adblk_no"# "csm-hit": "tb:s-K3VN7V41Z5H7N250A9NE|1627974200332&t:1627974200622&adb:adblk_no""csm-hit": "tb:6CJBWDDJGRZPB09G+b-K3VN7V41Z5H7N250A9NE|1627974443&t:1627974446683&adb:adblk_no"}save_cookies(cookies)if __name__ == '__main__':main()
  1. 爬到了url就很晚了,本来想着原来那么简单,再对每个url加上cookie再一爬取页面,xpath一解析就完事了,先睡觉喽。
  2. 第二天上午继续做,发现事情果然没那么简单。对每个商品进行爬取时cookie也对应着变,每一次请求都会发现cookie中csm-hit字段的值都会变。而且不知为何昨天晚上弄得那个代码也爬不到了。崩了。但是肯定还是有办法的。
  3. 没错,就是selenium。自动化操作,一个一个请求页面url,获取页面详细信息也挺香的,还不用输cookie啥的。
  4. 先把昨天的url重新获取。(用无头化发现获取不全url,于是就注释掉了)
from selenium import webdriver
from time import sleep
from lxml import etree
# # 实现无可视化界面
# from selenium.webdriver.chrome.options import Options
# # 实现规避检测
# from selenium.webdriver import ChromeOptions
# # 实现无可视化界面的操作
# chrome_options = Options()
# chrome_options.add_argument('--headless')
# chrome_options.add_argument('--disable-gpu')
# # 实现规避检测
# option = ChromeOptions()
# option.add_experimental_option('excludeSwitches', ['enable-automation'])# , chrome_options=chrome_options, options=optiondriver = webdriver.Chrome(r'C:\Program Files\Google\Chrome\Application\chromedriver.exe')sleep(2)
for i in range(1, 8):url = "https://www.amazon.com/s?k=anime+figure+one+piece&page=" + str(i)try:driver.get(url)page_list = []page_text = driver.page_sourcetree = etree.HTML(page_text)a_list = tree.xpath('//a[@class="a-link-normal a-text-normal"]/@href')for j in a_list:page_url = "https://www.amazon.com" + jpage_list.append(page_url)for k in page_list:with open("page02.txt", "a") as f:f.write(k + "\r")sleep(2)print(str(i) + "  ok")except:print(str(i) + "  eroor")continue
  1. 因为要英文的商品标题和介绍,在爬取商品详情前要先把美国的邮编输上去,就会自动改成英文的。当然自动化来搞了,定位定位click,再输入就完事了。
  2. 问题又来了,这图片咋获取呀,获取到的都是40*40的图片,根本看不清楚。不过是问题总能解决的。
  3. 分析html页面,高清的图片在这个高亮的li标签里,但是只有这一个高清的图片。
    在这里插入图片描述
  4. 不过仔细搞下,发现当我鼠标在这图片上一经过在这里插入图片描述
  5. 下面的li标签立刻就多了起来,在一个个打开,发现果然是高清的图片在这里插入图片描述
  6. 于是就有办法了,我可以在每次获取页面的html详情前都先把这图片都点击一下,然后再获取页面html信息,再进行xpath解析,再对获取到的标题,介绍,价格进行写入文件的操作就行了,于是就OK了。
from selenium import webdriver
from time import sleep
from lxml import etree
import os
import requestsheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"
}
driver = webdriver.Chrome(r'C:\Program Files\Google\Chrome\Application\chromedriver.exe')driver.get("https://www.amazon.com/gp/slredirect/picassoRedirect.html/ref=pa_sp_atf_aps_sr_pg1_1?ie=UTF8&adId=A08238052EFHH6KXIQA1O&url=%2FAnime-Cartoon-Figure-Character-Model-Toy%2Fdp%2FB094QMYVNV%2Fref%3Dsr_1_1_sspa%3Fdchild%3D1%26keywords%3Danime%2Bfigure%2Bone%2Bpiece%26qid%3D1627911157%26sr%3D8-1-spons%26psc%3D1&qualifier=1627911157&id=1439730895405084&widgetName=sp_atf")
button = driver.find_element_by_xpath('//a[@class="nav-a nav-a-2 a-popover-trigger a-declarative nav-progressive-attribute"]')
button.click()
sleep(2)input = driver.find_element_by_id('GLUXZipUpdateInput')
input.send_keys("75159")
sleep(1)
button_set = driver.find_element_by_id('GLUXZipUpdate')
button_set.click()
sleep(2)
# button_close = driver.find_element_by_id('GLUXConfirmClose-announce')
# sleep(2)page_list = []
with open("page02.txt", "r") as f:for i in range(0, 368):t = f.readline()page_list.append(t[0:-1])
i = 1for url in page_list:try:# ls = []sleep(2)driver.get(url)# page_text = driver.page_source# # print(page_text)# tree = etree.HTML(page_text)sleep(2)# imgfor p in range(4, 13):try:xpath_1 = format('//li[@class="a-spacing-small item imageThumbnail a-declarative"]/span/span[@id="a-autoid-%d"]' % p)min_img = driver.find_element_by_xpath(xpath_1)min_img.click()except:continuepage_text = driver.page_sourcetree = etree.HTML(page_text)max_img_list = tree.xpath('//ul[@class="a-unordered-list a-nostyle a-horizontal list maintain-height"]//div[@class="imgTagWrapper"]/img/@src')# print(max_img_list)# titletitle_list = tree.xpath('//span[@class="a-size-large product-title-word-break"]/text()')[0]# print(title_list[8:-7])title = title_list[8: -7]# priceprice_list = tree.xpath('//span[@class="a-size-medium a-color-price priceBlockBuyingPriceString"]/text()')# print(price_list[0])price = price_list[0]# itemitem_title = tree.xpath('//table[@class="a-normal a-spacing-micro"]/tbody/tr/td[@class="a-span3"]/span/text()')item_con = tree.xpath('//table[@class="a-normal a-spacing-micro"]/tbody/tr/td[@class="a-span9"]/span/text()')# print(item_title)# print(item_con)item_list = []for k in range(len(item_title)):item_list.append(item_title[k] + " -:- " + item_con[k])# print(item_list)# about# about_title = tree.xpath('//div[@class="a-section a-spacing-medium a-spacing-top-small"]/h1[@class="a-size-base-plus a-text-bold"]/text()')about_li = tree.xpath('//div[@class="a-section a-spacing-medium a-spacing-top-small"]/ul/li/span[@class="a-list-item"]/text()')# about_title_str = about_title[0][2:-2]# print(about_li[2:])# 文件夹路径path = "./data4/" + str(i)if not os.path.exists(path):os.mkdir(path)# print(path)# txt文件路径path_txt = path + "/" + str(i) + ".txt"with open(path_txt, "a") as f:f.write(title + "\r")f.write(price + "\r")for p in item_list:with open(path_txt, "a+") as f:# f.write("\r")f.write(p + "\r")for o in about_li:with open(path_txt, "a+", encoding="utf8") as f:f.write(o)for d in max_img_list:img_data = requests.get(url=d, headers=headers).contentimg_path = path + "/" + str(i) + d.split("/")[-1]with open(img_path, 'wb') as fp:fp.write(img_data)print(str(i) + "  OK")i = i + 1except:sleep(2)i = i + 1print(str(i) + "error")continuesleep(10)
driver.quit()

注意:一定要先进行点击那几张图片,再获取html页面源码,否则解析不到那几张高清图片。
成果展示
每个商品都建了个文件夹
在这里插入图片描述
里面有个txt文件,和所有图片
在这里插入图片描述
txt文件里就是标题,价格,详细描述了
在这里插入图片描述
over! over!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/45095.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#绘图及图像

C#绘图及图像 绘图的基本方法 绘图的应用

一键即可实现图片翻译成中文,多国语言任意选

大家有没有遇到过以下这些困扰呢:职场上对接的甲方是外国人,对方发来一堆外文图片文件、或是想在网上了解一些国外的实时资讯,但通常内容中会夹杂着一些英文图片等等。这些情况对于外语基础薄弱的人来说,简直是一个头两个大&#…

在线古诗自动生成器的设计与实现

在线古诗自动生成器的设计与实现 前言一、算法模型介绍LSTM简介模型框架实验环境实验与分析实验数据集数据集预处理训练过程模型训练结果模型的评估 二.在线古诗生成器的设计与实现系统结构远程服务器的项目部署系统测试 三.成品展示 前言 古诗,作为中华文化的凝结&…

[R语言]手把手教你如何绘图(万字)

目录 概况 常用高级图形 条形图 csv文件导入 csv文件导出 R语言sep函数 seq函数 with函数 直方图和密度估计图 盒型图 boxplot() 正态QQ图 散点图 pairs()散点矩阵图 曲线图 curve() 三维图 动态三维图 低级图形函数 abline() lines() legand()增加图例 …

古诗文本自动生成唐诗文本生成(算例代码)

首先准备好一个本地文件,在此我命名为唐诗三百首.txt如下图(https://img-blog.csdnimg. 图片: ##代码如下 import numpy as np, os from collections import Counter from warnings import filterwarnings filterwarnings(ignore) # 不打印警告from keras.utils…

UE4_UE5结合offline voice recognition插件做语音识别功能

市面上主流的语音识别大多是用科大讯飞的SDK,但是那个也不是完全免费使用的,于是我选择使用offline voice recognition的语音识别,购买插件终生使用。 offline voice recognition插件在UE官方商城卖200多元。 我将它需要的资源都打包成一个r…

AI协助理清思路?两位大学生短时间内开发的ChatMind思维导图为知识工作者带来无限便利

为什么结合ChatGPT生成的思维导图比其他ChatGPT有优势 结合ChatGPT生成的思维导图的优势在于,它可以将ChatGPT生成的信息可视化并以图形化的方式呈现出来。这样可以让用户更容易理解,记忆和组织ChatGPT生成的信息。思维导图还可以帮助人们分析ChatGPT生…

写了一首 Java 表白诗,女朋友不愁了!

祝大家 情人节快乐 一首原创 Java 诗 表白大家了 遇见你的第一天 忍不住内心的躁动 我在心里开辟了一块你的内存区域 和你的每一次美好邂逅 我都封装成记忆 深深将它压入堆栈 舍不得让它逃逸 追求你的队列很长 并发很高 我也加入了竞争 拼命挣抢着你的爱情锁 却被一直阻塞着 想…

写一首 Java 表白诗,女朋友不愁了 | 每日趣闻

作者 | 栈长 来源 | Java技术栈(ID:javastack) 遇见你的第一天 忍不住内心的躁动 我在心里开辟了一块你的内存区域 和你的每一次美好邂逅 我都封装成记忆 深深将它压入堆栈 舍不得让它逃逸 追求你的队列很长 并发很高 我也加入了竞争 拼命挣抢…

我居然帮初恋用Python去追她男神,这波舔狗真的坐实了啊~

事情的起因呢是这样的,初恋前几天突然给我发消息,内心一阵的波涛汹涌啊以为好事将近。聊了几句之后才发现她这是醉翁之意不在酒啊 特意找上我居然是因为辣条我是程序员来让我想办法帮她追现在隔壁家的小哥哥,真的是叔可忍婶不可忍啊。但是面…

【python】程序员最浪漫的表白方式,将情书写在她的照片里

前言 大家早好、午好、晚好吖~ 这不光棍节快到了,表弟准备写一封情书给他的女神,想在光棍节之前脱单。 为了提高成功率,于是跑来找我给他参谋参谋,本来我是不想理他的。 不过谁让他是我表弟呢(请我洗jio)…

程序员最浪漫的表白方式,将情书写在她的照片里,Python简直太厉害啦~

人生苦短,我用Python 序言实现步骤1、准备工作2、Pillow 介绍3、实战演练 序言 这不光棍节快到了,表弟准备写一封情书给他的女神,想在光棍节之前脱单。 为了提高成功率,于是跑来找我给他参谋参谋,本来我是不想理他的&…

一次10万token!GPT4最强对手史诗升级,百页资料一分钟总结完毕

号称ChatGPT“最强竞争对手”的Claude,今天迎来史诗级更新—— 模型记忆力原地起飞,现在1分钟看完一本数万字的小说,已经不在话下。 消息一出,评论区直接炸了,网友们蜂拥而至,“woc连连”: 疯了…

刚刚!全球科技巨头官宣:再裁 9000 人...

点关注公众号,回复“1024”获取2TB学习资源! 当地时间3月20日,全球科技巨头亚马逊宣布再裁员约9000人,目标瞄准薪酬更高的员工。按照美联社说法,最新宣布的这轮裁员规模为亚马逊“历史上第二大”,仅次于1月…

微信官方回应不会推出「已读」功能,网友:“这些功能先完善一下!”

整理 | 朱珂欣 出品 | CSDN程序人生(ID:coder_life) 7 月 11 日,#如果微信显示已读的话# 的话题冲上微博热搜,引发热议不断。 与此同时,「回复焦虑、社交困扰、意念回复、退网」等词眼,开始涌…

chatgpt赋能python:用Python进行选股——走进智能投资时代

用Python进行选股——走进智能投资时代 简介 投资者在股票投资中常常面临的问题是如何找到潜在的优质股票。传统的选股方法是基于人工分析和大量数据筛选,耗时又费力。而现代的使用 Python 进行选股的方法,可以将人工分析和大量数据筛选进行自动化&…

3.11 怎么增加小红书评论区的互动?【玩赚小红书】

今天就为大家总结了一下,关于小红书粉丝互动的一些小技巧,来供大家参考。 ​ ​ 一、 固好“真爱粉” 经常会在笔记下面评论、点赞、浏览笔记内容的粉丝,也就是所谓的“真爱粉”、“铁粉”,我们就需要用心维护这一部分粉丝。 ​…

无聊小知识.04 以下代码会输出什么?

1、前言 今天同事给我看了一段代码,然后这段简单的代码,我却陷入了沉思。 2、代码 String string ""; try {string "123";return string; } finally {string "234"; } 这段代码,string最终是“123”还是…

API接口设计不合理?个人和公司都有问题

前言 在软件产品或项目开发过程中,往往涉及到大量API接口的开发任务。而一个接口的诞生如果是令人费解的、痛苦折磨的以及有严重后遗症的,究其根本原因还在于设计API接口的时候不够清晰、合理以及缺乏长远考虑。我依据多位同事的问答、实际工作的经验和…

从亿点点失误,到一点点失误,我是如何做的【工作失误怎么办】

前言 只要我们还在做事,或者说还活着,就没有不犯错的时候。作为一名前端搬砖工,哪怕工作中再仔细小心,也免不了一些失误。 那这是不是说,失误很正常,改了就是嘛? 这么说好像没错。作为失误本…