段时间亚马逊日本站出公告称卖家不能在详情页面上使用HTML代码后,多位其他站点的亚马逊卖家就开始了一连串的问候:为什么美国站并没有这个news?为什么欧洲站并没有这个news?是不是新规只针对日本站?
时间给出答案:欧洲站以及美国站卖家也即将不能使用HTML标签了。
欧美站发出通知:将不再支持在详情页面上使用HTML标记
据了解,亚马逊一直不建议卖家在详情页面上使用任何HTML内容,这一点在商品详情页面规则中早已经阐明,即使如此还是有不少亚马逊卖家在商品描述页面使用HTML。
近日,亚马逊欧洲站和美国站相继发出通知明确表示,将不再支持在详情页面上使用HTML标记。
从图中内容可以看出,为了向消费者提供安全性以及在非HTML设备上列出产品的多功能性,2021年7月17日之后,亚马逊将停止支持在产品详细信息页面上的产品说明中使用HTML标签。美国站卖家需要按照平台的产品详细信息页面规则中的规定。
亚马逊建议卖家在上述日期之前使用HTML标签更新商品详情页面,卖家可以使用卖方中心或通常的渠道进行此类更新。
2021年7月17日之后,不支持在产品详细信息页面中包含HTML标记的所有产品描述将停止显示HTML格式。例如,如果卖家在产品说明的一行中使用HTML标记,则该行可能会被删除或不使用HTML格式显示,这取决于标记的用法。
除了美国站,欧洲站卖家也即将不能使用HTML标记了。
从中可以看出,亚马逊对欧洲站卖家的要求和美国站卖家大差不差,只是新规生效日期不同,暨从2021年6月19日开始,如果欧洲站卖家在产品说明的任何行中使用HTML标签,则该行将被删除或不使用HTML格式显示。
卖家:怎么换行?怎么加粗字体?
小编了解到,很多亚马逊卖家一直以来都是用HTML代码来编辑详情页,现在亚马逊不让卖家使用HTML了,多位卖家异常惆怅:还有什么办法实现换行和段落功能吗?
一位手工卖家表示,这个政策对手工卖家来说很糟糕,因为直到最近,我们还在大量使用HTML,现在我们不得不接受重新编辑所有这些列表的重大噩耗!
另一位亚马逊卖家同样抱怨连连:这太可怕了!我仍在处理白色背景图片,并在更新照片时重新修改了我的描述,现在即使是我遵循的规则,我也必须重新更改所有内容,因为它们再次更改了规则!
实际上,这个政策也再次把品牌话题带动了起来,用某位亚马逊卖家自己的话说就是,亚马逊是在逼着卖家注册品牌,换A+,这是大势所趋。以美国站卖家为例,亚马逊Listing描述从7.17后不再支持HTML tags, 也就是说还不备案品牌的卖家,以后描述的页面可能就是一堆堆的样子,这实在是没眼看。
小编发现,从今年4月份开始,就陆续有卖家表示用不了HTML了:
卖家A:最近英国站不能用可视化编辑器了,我最近都是手打<b>,一用那个可视化编辑器就提示无效值。
卖家B:4月份上传了几个产品,美国站用可视化编辑器的代码也显示不了分行了……
值得注意的是,政策出来后卖家在以后能否用HTML换行的问题上纠结了起来。对此政策,一位卖家认为以后详情页描述里面,常用的换行<br>,换段落<p>,加粗<b>这些标签都不准再用了,趁早批量用模板更新移除,否则可能会影响listing的完整显示。
但是也有卖家表示,政策生效后仍可以用</br>换行,因为亚马逊表示,在特殊情况下,卖家可以在描述中根据需要使用换行符 (</br>)。
小编想说,不管怎样,卖家还是早做准备,弄清楚亚马逊所说的特殊情况是什么意思,以免政策生效后亡羊补牢为时已晚。
商品详情页面规则
除了亚马逊将停止支持在产品详细信息页面上的产品说明中使用HTML标签这个新闻值得卖家关注,广大亚马逊卖家还需仔细研读商品详情页面规则。
买家通过商品详情页面了解卖家的商品,亚马逊也对商品详情页面进行了严格规定,亚马逊要求卖家确保每个商品详情页面包含单一商品,这有助于为买家提供清晰且一致的购买体验。一般来说,卖家需要遵守以下规定:
1、遵守任何相关的风格指南,避免使用HTML、JavaScript或其他代码。
2、排除不适宜的内容,如淫秽或攻击性材料、链接或联系信息、情节剧透、评论或评论请求以及广告。
避免为已有详情页面的商品创建重复页面。
3、准确地分类和描述商品。
4、为新商品或新版本创建新的详情页面。
5、仅创建与主要商品相关的有效“变体”。
在编写商品信息时,亚马逊方面表示商品详情页面的商品名称、描述、要点或图片中不允许出现以下任何内容:
电话号码、地址、电子邮件地址或网站URL;
供货情况、商品价格或状况详情;
评论、引用或推荐内容;
请求买家发布正面评价的言辞;
用于下订单的其他网站链接或备选配送服务(如免费配送);
在图片、照片或视频上加印广告、宣传资料或水印;
时效性信息,如宣传活动、研讨会或讲座的日期;
在属性中全部使用大写字母,这适用于商品名称、要点和/或商品描述,据了解,亚马逊允许卖家仅对每个单词的开头使用大写字母。
此外,卖家还需注意的是,商品名称不得超过200个字符(包括空格,此上限适用于所有分类,某些分类的字符数可能更少。
一句话总结就是,在亚马逊上销售的任何商品均应遵守亚马逊商品信息标准,如果卖家未遵守这些标准,则会导致负面买家体验,并可能会导致卖家的销售权限被暂时或永久取消。
selenium原本是一款自动化测试工具,因其出色的 页面数据解析 和 用户行为模拟能力 而常用于爬虫程序中,致使爬虫程序的爬取过程更简单、快捷。
爬虫程序与其它类型程序相比较,本质一样,为数据提供处理逻辑,只是爬虫程序的数据来源于 HTML 代码片段中。
怎样准确查找到页面中数据所在的标签(或叫节点、元素、组件)就成了爬虫程序的关键,只有这一步成立,后续的数据提取、清洗、汇总才有可能。
相比较于 Beaufulsoup 模块, selenium 底层依靠的是强大的 浏览器引擎 ,在页面解析能力上颇有王者的从容和决绝。
本文将使用 selenium 自动摸拟用户的搜索行为,获取不同商城上同类型商品的价格信息,最终生成商品在不同商城上的价格差对比表。
本文通过实现程序流程讲解 selenium,只会讲解程序中涉及到的 selenium 功能。不会深究其它 selenium API 的细节。所以你在阅读本文时,请确定你对 selenium 有所一点点的了解。
本程序实现了用户不打开浏览器、只需要输入一个商品关键字,便能全自动化的实现在不同商城中查找商品价格,并汇总出价格一些差异信息。
虽然本文不深究 selenium API 的细节,但是,既然要用它,其使用流程还是要面面俱到。
pip3 install selenium除了安装 selenium 模块,还需要为它下载一个 浏览器驱动程序 ,否则它无法工作。
什么是浏览器驱动程序?为什么需要它?
解释这个问题,需要从 selenium 的工作原理说起。
Beautiful soup使用特定的解析器程序解析 HTML 页面。 selenium 更干脆、直接借助浏览器的解析能力。通过调用浏览器的底层 API 完成页面数据查找,也是跪服了,不仅爬取,还可以向浏览器模拟用户行为发送操作指令。
有没有感觉浏览器就是 selenium 手中的牵线木偶(玩弄浏览器于股掌之中)。 selenium 的工作就是驱动浏览器,向浏览器发送指令或接收浏览的反馈,此过程中,浏览器驱动程序(webdriver)就起到了上传下达的作用。
典型的组件开发模式。
很显然,因不同浏览器的内核存在差异性,驱动程序必然也不相同,所以,下载驱动程序之前,请确定你使用的浏览器类型和版本。
本文使用谷歌浏览器,需要下载与谷歌浏览器对应的 webdriver 驱动程序。
准备工作就绪后,开始编码:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import csv
import time
import math
# 浏览器对象
chrome_browser = None
# 商品关键字
search_keyword = None
# 保存在京东商城搜索到的商品数据,格式{商品名:价格}
jd_data = {}
# 保存在苏宁商城搜索到的商品数据,格式{商品名:价格}
sn_data = {}'''
初始浏览器对象
'''
def init_data():
# 驱动程序存放路径
webdriver_path = r"D:\chromedriver\chromedriver.exe"
service = Service(webdriver_path)
# 构建浏览器对象
browser = webdriver.Chrome(service=service)
# 等待浏览器就绪
browser.implicitly_wait(10)
return browser
'''
初始用户输入的商品名称关键字
'''
def input_search_key():
info = input("请输入商品关键字:")
return info'''
进入京东商城查询商品信息
'''
def search_jd():
global jd_data
products_names = []
products_prices = []
# 京东首页
jd_index_url = r"https://www.jd.com/"
# 打开京东首面
try:
if chrome_browser is None:
raise Exception()
else:
# 打开京东首页
chrome_browser.get(jd_index_url)
# 模拟网络延迟
chrome_browser.implicitly_wait(10)
# 找到文本输入组件
search_input = chrome_browser.find_element(By.ID, "key")
# 在文本框中输入商品关键字
search_input.send_keys(search_keyword)
chrome_browser.implicitly_wait(5)
# 找到搜索按钮 这里使用 CSS 选择器方案
search_button = chrome_browser.find_element(By.CSS_SELECTOR, "#search > div > div.form > button")
# 触发按钮事件
search_button.click()
chrome_browser.implicitly_wait(5)
# 获取所有打开的窗口(当点击按钮后应该有 2 个)
windows = chrome_browser.window_handles
# 切换新打开的窗口,使用负索引找到最后打开的窗口
chrome_browser.switch_to.window(windows[-1])
chrome_browser.implicitly_wait(5)
# 获取商品价格
product_price_divs = chrome_browser.find_elements(By.CLASS_NAME, "p-price")
for i in range(5):
div = product_price_divs[i]
if len(div.text) != 0:
# 删除价格前面的美元符号
products_prices.append(float(div.text[1:]))
# 获取商品名称
product_name_divs = chrome_browser.find_elements(By.CLASS_NAME, "p-name")
chrome_browser.implicitly_wait(10)
for i in range(5):
div = product_name_divs[i]
if len(div.text) != 0:
products_names.append(div.text)
jd_data = dict(zip(products_names, products_prices))
jd_data["平均价格"] = sum(products_prices) / len(products_prices)
jd_data["最低价格"] = min(products_prices)
jd_data["最高价格"] = max(products_prices)
# 使用 CSV 模块写入文档
csv_save("京东商城", jd_data)
except Exception as e:
print(e)chrome_browser:由 webdriver 构建出来的对 浏览器 映射的对象, selenium 通过此对象控制对浏览器的所有操作。
此对象有一个 find_element( ) 核心方法,用来查找(定位)HTML 页面元素。查找时,可以通过 By 对象指定查找的方式(这里使用了工厂设计模式), By 的取值可以是 ID、CSS_SELECTOR、XPATH、CLASS_NAME、CSS_SELECTOR、TAG_NAME、LINK_TEX、PARTIAL_LINK_TEXT。
打开京东首页后,先定位定位 文本搜索框 和 搜索按钮 。
使用浏览器的开发者工具,检查到文本框的源代码是一段 input html 片段,为了精确地定位到此组件,一般先试着分析此组件有没有独有的属性或特征值,id 是一个不错的选择。html 语法规范 id 值应该是一个唯一值。
search_input = chrome_browser.find_element(By.ID, "key")找到组件后,可以对此组件进行一系列操作,常用的操作:
这里使用 send_keys 给文本组件赋予用户输入商品关键字。
search_input.send_keys(search_keyword)再查找搜索按钮组件:
按钮组件是一段 button html 代码,没有过于显著的特性属性值,为了找到这个唯一组件,可以使用 XPATH 或 CSS 选择器 方式。右击此代码片段,在弹出的快捷菜单中找到“复制”命令,再找到此组件的 CSS选择器值。
search_button = chrome_browser.find_element(By.CSS_SELECTOR, "#search > div > div.form > button")调用按钮组件的 click() 方法,模拟用户点击操作,此操作会打开新窗口,并以列表方式显示搜索出来的商品数据。
search_button.click()selenium接收到浏览器打开新窗后的反馈后,可以使用 window_handles 属性获取浏览器中已经打开的所有窗口,并以列表的方式存储每一个窗口的操作引用。
windows = chrome_browser.window_handles对页面元素进行定位查找时,有一个当前窗口(当前可以、正在操作的窗口)的概念。刚开始是在首页窗口操作,现在要在搜索结果窗口中进行操作,所以要切换到刚打开的新窗口。使用负索引得到刚打开的窗口(刚打开的窗口一定是最后一个窗口)。
chrome_browser.switch_to.window(windows[-1])注意,这时切换到了搜索结果窗口,便可以在这个窗口中搜索所需要组件。
在这个页面中,只需要获取前 5 名的商品具体信息,包括商品名、商品价格。至于具体要获取什么数据,可以根据自己的需要定夺。本程序只需要商品的价格和名称,则检查页面,找到对应的 html 片段。
商品名信息存放在一个 div 片段中,此 div 有一个值为 p-name 的 class 属性。可以使用 CSS-NAME 方式获取,因为所有的商品采用相同片段模板,这里使用 find_elements( ) 方法即可。
product_name_divs = chrome_browser.find_elements(By.CLASS_NAME, "p-name")find_elements方法返回具有相同 CSS-NAME 的组件列表,编写代码迭代出每一个组件,并获取数据,然后存储在商品名称列表中。
for i in range(5):
div = product_name_divs[i]
if len(div.text) != 0:
products_names.append(div.text)以同样的方式,获取到价格数据。再把商品名称和价格数据制成字典,并对价格数据做简单分析。
jd_data = dict(zip(products_names, products_prices))
jd_data["平均价格"] = sum(products_prices) / len(products_prices)
jd_data["最低价格"] = min(products_prices)
jd_data["最高价格"] = max(products_prices)
csv_save("京东商城", jd_data)def csv_save(sc_name, dic):
with open("d:/" + sc_name + ".csv", "w", newline='') as f:
csv_writer = csv.writer(f)
csv_writer.writerow([sc_name, search_keyword + "价格分析表"])
for key, val in dic.items():
csv_writer.writerow([key, val])以 CSV 格式存储从京东商城上爬取下来的数据。
def search_sn():
global sn_data
# 保存商品名称
products_names = []
# 保存商品价格
products_prices = []
# 苏宁首页
sn_index_url = r"https://www.suning.com/"
try:
if chrome_browser is None:
raise Exception()
else:
# 打开首页
chrome_browser.get(sn_index_url)
# 摸拟网络延迟
chrome_browser.implicitly_wait(10)
# 查找文本输入组件
search_input = chrome_browser.find_element(By.ID, "searchKeywords")
# 在文本框中输入商品关键字
search_input.send_keys(search_keyword)
time.sleep(2)
# 找到搜索按钮 这里使用 CSS 选择器方案
search_button = chrome_browser.find_element(By.ID, "searchSubmit")
# 触发按钮事件
search_button.click()
time.sleep(3)
# 获取所有打开的窗口(当点击按钮后应该有 2 个)
windows = chrome_browser.window_handles
# 切换新打开的窗口,使用负索引找到最后打开的窗口
chrome_browser.switch_to.window(windows[-1])
chrome_browser.implicitly_wait(20)
# 获取商品价格所在标签
product_price_divs = chrome_browser.find_elements(By.CLASS_NAME, "def-price")
# 仅查看前 5 个商品信息
for i in range(5):
div = product_price_divs[i]
# 删除价格前面的美元符号
if len(div.text) != 0:
products_prices.append(float(div.text[1:]))
chrome_browser.implicitly_wait(10)
# 获取商品名称
product_name_divs = chrome_browser.find_elements(By.CLASS_NAME, "title-selling-point")
for i in range(5):
products_names.append(product_name_divs[i].text)
#
sn_data = dict(zip(products_names, products_prices))
sn_data["平均价格"] = sum(products_prices) / len(products_prices)
sn_data["最低价格"] = min(products_prices)
sn_data["最高价格"] = max(products_prices)
# 使用 CSV 模块写入文档
csv_save("苏宁商城", sn_data)
except Exception as e:
print(e)获取到苏宁易购上的商品数据后,同样以 CSV 格式存储。
def price_result():
if len(jd_data) != 0 and len(sn_data) != 0:
with open("d:/商品比较表.csv", "w", newline='') as f:
csv_writer = csv.writer(f)
jd_name = list(jd_data.keys())
jd_price = list(jd_data.values())
sn_price = list(sn_data.values())
csv_writer.writerow(["比较项", "京东价格", "苏宁价格", "价格差"])
for i in range(5, len(jd_price)):
csv_writer.writerow([jd_name[i], jd_price[i], sn_price[i], math.fabs(jd_price[i] - sn_price[i])])保存了两个商城上商品价格的平均值、最小值、最大值以及绝对差。
if __name__ == '__main__':
search_keyword = input_search_key()
chrome_browser = init_data()
search_jd()
time.sleep(2)
search_sn()
price_result()请输入商品关键字:华为meta 40本文主要是应用 selenium 。通过应用过程对 selenium 做一个讲解,了解 selenium 的基本使用流程。数据分析并不是本文的重点。
如果要得到更全面的分析结果,则需要提供更多维度的数据分析逻辑。
文以小米京东旗舰店平台作为数据来源,爬取小米京东旗舰店十款热门手机的当前在线评论文本数据5110条数据,抽取小米10的手机评论数据做情感分析,对评论数据进行文本去重、机械压缩去词等文本预处理后,建立多种文本挖掘模型。
本文分别爬取小米京东自营旗舰店内的十款热门手机产品,不同的手机产品有不同的URL,不同的手机产品对应的URL如下所示。
网络爬虫也称之为网络蜘蛛,是一个程序化脚本,在下载网页信息时,可以实现循环自主化。网络爬虫通过网页请求,循环自主的下载每一个网页信息,并解析其页面内容。首先了解浏览网页的基本流程,分为浏览器向服务器发送请求,接着网页服务器向浏览器返回响应内容,浏览网页的基本流程如下所示。
图1 浏览网页基本流程图
接着进行网页解析,HTML用于展示网页的构成信息,XML用于保存数据,Xpath可用于在HTML/XML文档中定位并且提取片段,是一种常用的查询语言,网页解析的拓扑结构如下所示。
图2 网页解析拓扑结构图
爬取商品的评论数据分为请求URL、获取商品评论页、解析商品评论页以及设置循环翻页等步骤,爬取商品评论的一般流程如下所示。
图3 商品爬取评论流程图
了解爬虫的基本流程后,本文选取八爪鱼数据采集器,设计爬取流程,需要爬取手机产品的品牌信息和评论信息等,并设置循环翻页,循环爬取该款商品每一页的评论信息数据,八爪鱼流程设计如下图所示。
图4 爬虫流程设计图
共爬取小米京东自营旗舰店热销手机产品5110条数据,其中以小米10的手机评论数据最多,为510条,本文抽取小米10的手机评论数据做情感分析,各种型号的手机评论数据如下图所示。
图5 各型号手机评论数据柱形图
*请认真填写需求信息,我们会在24小时内与您取得联系。