Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
段時間亞馬遜日本站出公告稱賣家不能在詳情頁面上使用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;
供貨情況、商品價格或狀況詳情;
評論、引用或推薦內容;
請求買家發布正面評價的言辭;
用于下訂單的其他網站鏈接或備選配送服務(如免費配送);
在圖片、照片或視頻上加印廣告、宣傳資料或水?。?/p>
時效性信息,如宣傳活動、研討會或講座的日期;
在屬性中全部使用大寫字母,這適用于商品名稱、要點和/或商品描述,據了解,亞馬遜允許賣家僅對每個單詞的開頭使用大寫字母。
此外,賣家還需注意的是,商品名稱不得超過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小時內與您取得聯系。