scrapy进阶《封号码罗》之如何优雅的获取网页JavaScript中的数据(www.amazon.co.uk)

Python批量采集商品数据并使用多线程(含完整源码) 前言 嗨喽,大家好,这里是魔王~ 本次目的: Python批量采集商品数据 知识点: 爬虫基本流程 非结构化数据解析 csv数据保存 线程池的使用 开发环境: python 3.8 pycharm requests >>> pip install requests parsel >>> pip install parsel 网站思路分析: 找到数据来源 https://www.amazon.cn/s?rh=n%3A106200071&fs=true&a 阅读详情

免责声明:仅供学习,提高技术,请勿商业或恶意攻击网站等其他使用,欢迎留言,评论,点赞,转发!
由于亚马逊的机器检测比较灵敏,只能用scrapy+selenium来实现数据爬取了,虽然大部分的内容都能获取得到,比如静态的文字,可以直接获取了。如果想获取商品图片的高清大图,可能就没有那么容易了,一步一分析开始了
首先,得先找到高清图片的URL在哪儿吧,这个还是相对好找一些的,下图:
在这里插入图片描述
你会发现,data-old-hires属性不就是高清图片的URL地址吗,有了地址,获取图片不是近在咫尺吗?心中一阵狂喜。。。然而,左侧有四张图片,你才找到了一张,赶紧看看其他图片的高清地址,
咦?怎么其他图片难道没有高清地址
在这里插入图片描述
你准备放弃了,对不对,网页没有给数据,就是神仙,也拿不到啊?
别急,让我带你飞!
当你用鼠标,轻轻的滑过左侧四张缩略图时,右侧的li发生了变化
在这里插入图片描述
没错,我怀疑这是一个JS里面鼠标滑过的类似事件,那还等什么,有selenium怕什么,写鼠标滑动的操作呗,刚开始我就是这么操作的,但是效率是低的不能再低了,为什么呢?因为li出现是没有那么规律的,有时候是第四个开始,有时候又是第三个开始,那每一个不得搞try,下面是我之前写的代码:

    try:
        self.browser.get(request.url)
        # 点击左侧缩略图
        # slider = self.browser.find_element_by_css_selector("#nc_1_n1z")  # 找到滑动标签
        # X轴移动
        try:
            four = WebDriverWait(self.browser, 5).until(
                lambda x: x.find_element_by_xpath('//*[@id="altImages"]/ul/li[4]'))
            ActionChains(self.browser).click_and_hold(on_element=four).perform()
            for x in [0, 10, 20, 30, 40, 50, 50, 40, 30, 20, 10, 0]:
                ActionChains(self.browser).move_by_offset(xoffset=x, yoffset=0).perform()
            ActionChains(self.browser).release().perform()
        except Exception as e:
            print(e)
            try:
                four = WebDriverWait(self.browser, 5).until(
                    lambda x: x.find_element_by_xpath('//*[@id="altImages"]/ul/li[1]'))
                ActionChains(self.browser).click_and_hold(on_element=four).perform()
                for x in [0, 10, 20, 30, 40, 50, 50, 40, 30, 20, 10, 0]:
                    ActionChains(self.browser).move_by_offset(xoffset=x, yoffset=0).perform()
                ActionChains(self.browser).release().perform()
            except Exception as e:
                print(e)
        # Y轴移动
        try:
            three = WebDriverWait(self.browser, 5).until(
                lambda y: y.find_element_by_xpath('//*[@id="altImages"]/ul/li[3]'))
            ActionChains(self.browser).click_and_hold(on_element=three).perform()
            for y in [0, 10, 20, 30, 40, 50, 50, 50, 40, 30, 20, 10, 0]:
                ActionChains(self.browser).move_by_offset(xoffset=0, yoffset=y).perform()
            ActionChains(self.browser).release().perform()
        except Exception as e:
            print(e)
            try:
                three = WebDriverWait(self.browser, 5).until(
                    lambda y: y.find_element_by_xpath('//*[@id="altImages"]/ul/li[4]'))
                ActionChains(self.browser).click_and_hold(on_element=three).perform()
                for y in [0, 10, 20, 30, 40, 50, 50, 50, 40, 30, 20, 10, 0]:
                    ActionChains(self.browser).move_by_offset(xoffset=0, yoffset=y).perform()
                ActionChains(self.browser).release().perform()
            except Exception as e:
                print(e)
    except TimeoutException as e:
        print("timeout")
        self.browser.execute_script("window.stop()")

眼明手快的老铁可能已经发现了,分了X轴和Y轴,这是因为要模拟鼠标滑过这些缩略图,而这些缩略图,有的是在左侧竖着排列,有的是在底部横着排列,所以,要写不同的try,不同的try又对应起始不同的li标签,所以,大概有四分之三的步骤是在浪费时间,只有正确的四分之一的操作对应到了某个商品,如果爬取少量的数据,这玩意儿也差不多,但是要几千几万的爬,这效率就低太多了,难道就没有更效率的方法了吗?唉,头发好像就少了一些。。。
重新回到页面,继续分析,验证猜测,
在这里插入图片描述
翻遍了所有的请求,最后还是发现并猜想,既然这些数据没有异步加载,而是直接返回了数据,可能高清图片地址就隐藏在某个js里面,只不过需要鼠标滑过去触发才能显示,
在这里插入图片描述
因为之前写过几个亚马逊的爬虫,所以我清楚的之后,亚马逊的图片命名有一个规律,那就是相同商品高清图片地址像素的大小相同,切后缀是统一的,所以我打算搜索一下._AC_SL1000_.jpg检测一下我的猜想
在这里插入图片描述
果然,天无绝人之路,数据已经在响应里面了,而且经过前后分析,我发现数据就是在这个方法里面,那我又该通过什么方式获取这些数据呢?
回到页面,重新搜索一下,看看数据在不在标签里面,xpath能搞不能?
在这里插入图片描述
开心一刻!
在这里插入图片描述
xpath能拿到数据了,但是需要的高清图地址又该怎么获取呢?有头绪吗?冥想中。。。
管他三七二十一,先把获取到的数据打印出来看一看再说:

hdimg_js_str = response.xpath('//*[@id="imageBlock_feature_div"]/script[1]/text()').extract_first()

是不是发现,打印出来的数据,还是跟网页上面的一样,一行一行的,还有空格和换行呢?这该怎么搞呢?
还能怎么办,整理数据呗!

hdimg_js_str = str(hdimg_js_str).replace(" ", "").replace("\n", "").replace("\r", "")

嗯嗯,这是一个大的字符串,我需要的数据在哪儿呢?
在这里插入图片描述
数据已经能够拿到了,要提炼出来高清图地址,看来只能拿出我的re来获取了,反反复复的尝试:把当前四个数据正则出来很简单,回头一想,不同的商品有不同数量的图片,那就是正则直接从字符串中获取图片地址就不科学了,你用match,search,findall,哪个都不合适呀,怎么办,怎么办?
咦,数据在colorImages字典里面,我可以先用正则获取这个大字典的字符串,然后转成字典,遍历字典应对不同数量的图片地址,这种方式它不香吗,搞起来。。。
先正则获取字典字符串:

reg = re.compile(".*data.*({\'colorImages\'.*),\'colorToAsin\'.*")
hdimg_str = reg.search(hdimg_js_str).group(1)

这样,就能获取到里面colorImages的字符串了,现在,需要把它改造成一个字典的样子,

hdimg_str = str(hdimg_str).replace("'", "\"") + "}"

现在它已经是一个字典样子的字符串了,那怎样才能把一个字符串转变成一个字典呢?json就该出马了

hdimg_dict = json.loads(hdimg_str, encoding="utf-8")

打印一下试试,一个字典也是一个json,那获取数据不要太舒服了,

hdimgs = ""  # 定义一个空字符串,用于存储图片地址
for img_url in hdimg_dict["colorImages"]["initial"]:
  	hdimgs = hdimgs + img_url["hiRes"] + " | "
# 去除最后多出来的空格和竖线符号
main_hdimgs = hdimgs[:-3]
item["main_hdimgs"] = main_hdimgs

这样一来,selenium里面的那些try用来模拟鼠标滑动的语句就都可以删除了,只用它打开页面,加载完之后直接返回数据就可以了。

try:
    self.browser.get(request.url)
    self.browser.execute_script('window.scrollTo(0, 300)')
except TimeoutException as e:
    print("timeout", e)
    self.browser.execute_script("window.stop()")
time.sleep(random.random() * 1)
return HtmlResponse(url=self.browser.current_url, body=self.browser.page_source, encoding="utf-8",
                        request=request)

最后,来一组爬取好的数据镇楼!
在这里插入图片描述

如果有什么问题,VX:gcw-410,昵称:浅情人不知

用Python获取Amazon亚马逊的商品信息 1.首先获取亚马逊列表页的信息 以视频游戏区为例: 获取列表内能获取到的商品信息,如商品名,详情链接,进一步获取其他内容。 用requests.get()获取网页内容,xpath选取相关标签的内容: import requests from parsel import Selector from urllib.parse import urljoin spiderurl = 'https://www.amazon.com/s?i=videogames-intl-ship' headers = 阅读详情

相关推荐

python爬虫|爬取亚马逊商品库存数据(Selenium实战)

前言 很多人把selenium爬虫称之为可视化爬虫,之所以这样认为,主要在于selenium爬虫主要是模拟人的点击操作,而selenium驱动浏览器并进行操作的过程是可以观察到的。换言之,就是你在看着别人在帮你操纵你的电脑,类似于别人远程使用你的电脑,需要提到的是,selenium也有无界面模式。 下面,直接进入正文,以亚马逊商品数据为例,获取商品的当前库存数据。 正文 想要获取亚马逊的库存数据,那就需要先明白,亚马逊商品的库存数据是怎么获得的。 1.打开商品界面之后,需要先点击加入购物车.

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 6915

Python实现【亚马逊商品】数据采集

亚马逊作为最大的跨境电商平台之一,其产品一直备受关注,因此采集亚马逊产品功能也是部分卖家所需的,下面我们来了解一下采集亚马逊产品是如何操作的。,包括商品名称、价格、型号、星级和商品链接。采集亚马逊搜索关键词出来的商品信息。Python请求示例。

Jernnifer_mao的博客 1758

python+selenium爬取亚马逊商品评论详情

亚马逊评论详情页是动态加载的,不过多折腾,直接用selenium进行爬取;用pandas写入csv文件,解决乱码、无序问题;

用python爬取亚马逊物品列表

1. 仔细分析亚马逊查询详细界面可以看出来,主要关键部分有三个地方,这三个地方分别控制了查询列表的页面和关键字,所以修改这几个参数可以改变列表页数以及模糊查询的结果 http://www.amazon.cn/s/ref=sr_pg_3?rh=n%3A658390051%2Ck%3Aphp&page=3&keywords=Java&ie=UTF8&qid=1459...

weixin_34072637的博客 359

爬取亚马逊中国版某商品的信息

爬取亚马逊中国版商品的页面信息,主要用到的是selenium

Python实现爬取亚马逊数据并打印出Excel文件操作示例

主要介绍了Python实现爬取亚马逊数据并打印出Excel文件操作,结合实例形式分析了Python针对亚马逊图书数据的爬取操作,以及数据打印输出Excel相关实现技巧,需要的朋友可以参考下

Python亚马逊排行榜爬取

【代码】Python亚马逊排行榜爬取。

weixin_45423937的博客 581

从零开始:Basler相机与pylon Viewer的工业视觉入门指南

本文详细介绍了Basler相机与pylon Viewer在工业视觉系统中的入门指南,涵盖硬件连接、软件安装、核心功能解析及实战案例。通过pylon Viewer的全面控制和参数调整功能,帮助新手快速掌握工业视觉检测技术,提升生产效率。

julia4scientist的博客 1134

Python爬虫实战:抓取Amazon商品数据

本文详细介绍利用Python爬虫技术获取Amazon商品数据的完整方案。主要内容包括:环境搭建(安装requests、BeautifulSoup等库)、目标网站分析方法、核心爬虫代码实现(HTTP请求、数据解析、存储优化)、反反爬策略(随机延迟、代理IP池、验证码处理)以及分布式爬虫架构建议。特别强调法律合规性,建议遵守robots.txt规则和合理爬取间隔。文章还提供了项目结构推荐和扩展应用场景(价格监控、竞品分析等),最后总结最佳实践,建议从少量数据测试开始,逐步构建稳定高效的数据采集系统。

YF云飞的博客 2857

解密UFS Explorer:Drobo BeyondRAID数据恢复实战指南

本文详细介绍了使用UFS Explorer Professional Recovery软件中的Drobo BeyondRAID助手进行数据恢复的完整实战流程。当Drobo设备因BeyondRAID配置信息丢失而无法访问时,该工具能安全、只读地扫描硬盘,虚拟重建存储池,帮助用户找回宝贵数据。指南涵盖了从前期准备、硬盘选择、配置扫描到数据安全导出的每一步关键操作与常见问题解决方案。

weixin_29219539的博客 269

最全中文停用词表(可直接复制)

最全的停用此表整理 词表名 词表文件 中文停用词表 cn_stopwords.txt 哈工大停用词表 hit_stopwords.txt 百度停用词表 baidu_stopwords.txt 机器智能实验室停用词库 scu_stopwords.txt 以上停用词表链接:https://github.com/goto456/stopwords 以下是我常用的1893个停用词,可直接复制 ! " # $ % & ' ( ) * + , - -- . .. ... ....

dilifish的博客 12万+

实例——Python爬虫requests爬取亚马逊商品页面

1.打开亚马逊官网,随机浏览一商品详细页,复制URL。 2.用requests.get()方法获取网页相关信息 import requests r = requests.get("https://www.amazon.cn/dp/B07TLJS1HH/ref=s9_acsd_hps_bw_c2_x_0_i?pf_rd_m=A1U5RCOVU0NYF2&pf_rd_s=me...

AI算法联盟 8436

COMSOL实现裂缝性储层油水两相流模拟的关键技术

多孔介质中的流体流动模拟是油气藏开发的核心技术,其基本原理基于达西定律和质量守恒方程。在裂缝性储层中,离散裂缝网络与基质系统的耦合流动带来了特殊的数值挑战。通过COMSOL Multiphysics平台实现的多物理场耦合技术,可以精确模拟油水两相在复杂裂缝系统中的渗流行为。该技术采用Level Set方法表征裂缝几何形态,结合自适应网格生成技术解决狭窄裂缝的网格剖分难题,并创新性地引入Bang-Larsen毛管压力滞后模型,显著提高了采收率预测精度。这些方法在致密油藏开发、水驱优化等工程实践中具有重要应用价

weixin_34005090的博客 229

Python--Mysql连接池使用案例

1、工程结构 2、Config.py # coding:utf-8 ''''' Created on 2016年5月7日 @author: baocheng ''' DBHOST = "127.0.0.1" DBPORT = 3306 DBUSER = "root" DBPWD = "123456" DBNAME = "bms" DBCHAR = "utf8"3、MySqlCo

xuguokun1986的博客 3430

卡尔曼滤波与目标追踪

卡尔曼滤波与目标追踪为什么要学卡尔曼滤波?卡尔曼滤波是什么?一些概率论的知识基础卡尔曼滤波完整推导状态估计计算卡尔曼增益预测和更新 卡尔曼滤波部分我打算分三节(三次博客的内容): 卡尔曼滤波与行人状态估计 扩展卡尔曼滤波(EKF)与传感器融合 过程模型,无损卡尔曼滤波(UKF)与车辆状态轨迹 为什么要学卡尔曼滤波? 卡尔曼滤波以及其扩展算法能够应用于目标状态估计,如果这个目标是行人,那么就是行人状态估计(或者说行人追踪),如果这个目标是自身,那么就是车辆自身的追踪(结合一些地图的先验,GPS等数据的话就

qq_43232556的博客 4170

linux系统宝塔服务器temp文件夹里总是被上传病毒php脚本

服务器时不时的会发送短信说你服务器有病毒,找到了这个tmp文件,删除了之后又有了。确实是有很多人就这么无聊,每天都攻击你的服务器。找了很久的原因,网上也提供了一大堆方法,但都是很简陋的答案,具体怎么操作并没有说。没办法只能自己去排查这个问题。从两个角度来考虑,第一是服务器系统问题,比如宝塔的漏洞。但一时半会看不出问题来。只能去排查自己的项目代码。最后了解到代码确实是存在漏洞的。但代码中也确实了很多的校验,为什么会存在漏洞了?这就不得不从上传的过程开始说起。

guiplan 1496

Python爬虫实战之二:requests-爬取亚马逊商品详情页面

本实战项目是中国大学MOOC国家精品课程《Python网络爬虫与信息提取》(by嵩天北京理工大学)学习笔记。代码段均可在ide中运行by now(2021-11-29). 目录 1.爬取目标 2.爬取链接 3.技术路线 4.全部代码及输出 原始爬虫模板 改良爬虫模板 寻找请求头 改良后运行结果 5.总结 1.爬取目标 爬取亚马逊商品页面,比如这个商品。 相比上一篇爬取京东商品页面: Python爬虫实战之一:requests-爬取京东商品详情页面_miracle2me的专栏-..

miracle2me的专栏 6987

基于STM32姿态解算-正点原子ATK-IMU901模块标准库开发——正点原子串口角度传感器模块十轴IMU加速度气压计陀螺仪_资料编号29

购买了正点原子的ATK-IMU901模块后,发现例程给的是HAL库的,本项目将HAL库例程转换为库函数版本(基于STM32)。实战开发,亲测无误。

嵌入式阿齐Archie 3859

JaVers高级用法:自定义类型适配器与复杂对象比较技巧

JaVers是一个强大的Java对象审计和差异比较框架,它能够帮助开发者轻松跟踪对象的变更历史并比较复杂对象之间的差异。本文将深入探讨JaVers的高级用法,重点介绍如何创建自定义类型适配器以及掌握复杂对象比较的实用技巧,让你在项目中充分发挥JaVers的潜力。 ## 自定义类型适配器:让JaVers支持更多数据类型 在实际项目中,我们经常会遇到各种特殊的数据类型,JaVers虽然内置了对许多

gitblog_00066的博客 1845

USB驱动(URB)

本文介绍了Linux内核中USB驱动开发的核心概念URB(USB Request Block)。URB是主机与USB设备间传输数据的抽象结构体,包含目标设备、端点信息、数据缓冲区等关键字段。文章详细解析了URB的生命周期(分配、填充、提交、回调、释放)、四种传输类型(控制、批量、中断、等时)及其应用场景,并提供了鼠标设备的中断传输示例代码。最后强调了URB使用注意事项,包括DMA缓冲区分配、错误处理和资源释放等。URB作为USB驱动与内核通信的桥梁,是构建稳定USB驱动程序的基础。

m0_49476241的博客 915

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Python运用Selenium+BeautifulSoup爬取亚马逊电子通讯商品列表 2022/4/3

from selenium import webdriver from selenium.webdriver.firefox.service import Service from bs4 import BeautifulSoup import csv import time s = Service(r'D:\geckodriver\geckodriver.exe') #把上述地址改成你电脑中geckodriver.exe程序的地址 fp = webdriver.FirefoxOptions() fp..

weixin_51770684的博客 959

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

使用 Python + Selenium 抓取亚马逊商品

本文介绍了如何使用Selenium无头浏览器进行网页抓取。主要内容包括:1) 环境配置,需安装Python3、Selenium和对应浏览器驱动;2) 基本操作示范,如页面导航、元素定位和交互;3) 处理动态内容的方法,包括等待加载和无限滚动;4) 实用功能如截图、窗口大小调整;5) 反检测技巧,包括修改请求头、使用代理和资源拦截。文章还提到SeleniumWire扩展工具可增强请求拦截和修改能力,并展示了如何执行JavaScript代码。最后强调大规模抓取时需注意反爬措施。

小韭菜的博客 3226

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

python 爬虫框架 亚马逊_python爬虫----(6. scrapy框架,抓取亚马逊数据)-Go语言中文社区...

利用xpath()分析抓取数据还是比较简单的,只是网址的跳转和递归等比较麻烦。耽误了好久,还是豆瓣好呀,URL那么的规范。唉,亚马逊URL乱七八糟的.... 可能对url理解还不够.amazon├──amazon│├──__init__.py│├──__init__.pyc│├──items.py│├──items.pyc│├──msic││├...

weixin_30095869的博客 463

爬虫框架

一、python爬虫框架 一些爬虫项目的半成品 二、常见python爬虫框架 (1)Scrapy:很强大的爬虫框架,可以满足简单的页面爬取(比如可以明确获知url pattern的情况)。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。但是对于稍微复杂一点的页面,如weibo的页面信息,这个框架就满足不了需求了。 (2)Crawley: 高速爬取对应网站的内容,支持关系和非关系数据库,...

J__333的博客 709

python存储数据用text好还是exls_python爬虫30 | scrapy后续,把「糗事百科」的段子爬下来然后存到数据库中...

上回我们说到python爬虫29 | 使用scrapy爬取糗事百科的例子,告诉你它有多厉害!WOW!!scrapyawesome!!怎么会有这么牛逼的框架wow!!awesome!!用 scrapy 来爬取数据岂!不!是!非!常!爽!wow!!接下来就是我独享的moment哦不接下来就是学习 python 的正确姿势我们已经创建了爬取糗事百科的项目并且把糗事百科的前两页的作者和段子爬取到 json...

weixin_39886612的博客 134

CasperJS 1分钟写完爬虫拿亚马逊商品数据

角色Q: 私ねえ, Qです,よろしくお願いしますよ (我呀, 是小Q,请多多关照哟) A: 我是大叔 啊叁锅米 Q: 原来是 阿三呀, 最近行情不好,跑cn来啦呀 A: ……Q: 今天弄啥东东? A: 小爬虫Q: 做啥子哩 A: 爬爬AMAZON 的书价Q: 为啥虫子要爬 AMAZON, 不吃树叶 A: ……前提会点页面JavaScript Q: 不会肿么办呀?A: 。。。。。。已

wflowho的博客 3014
上一篇: scrapy进阶《封号码罗》之如何优雅的征服世界首富亚马逊(amazon.com)
下一篇: 《封号码罗》数据分析与人工智能之numpy(一)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值