?

跨境電商新品榜數據自動跟蹤研究與實現

2023-02-22 09:14葉文全
電大理工 2023年4期
關鍵詞:選品爬蟲批量

葉文全

(閩北職業技術學院,福建南平 353000)

0 引言

選品是跨境電商運營的一個痛點,采集跨境電商新品榜數據能夠獲取市場趨勢和競爭情況,為選品提供數據依據,但使用人工跟蹤新品榜數據難度大、效率低。本文通過對Scrapy框架技術在電子商務中的應用分析[1-4],同時,深入研究Scrapy框架、網頁數據解析、Selenium自動化操作和數據批量存儲等技術,得出了使用程序化實現新品榜數據自動跟蹤的技術可行性,提出一種基于Python、Selenium 和Scrapy框架技術的A站新品榜數據自動跟蹤解決方案。方案使用模擬瀏覽器、代理IP、Cookie、錯誤重試等方法應對A 站的反爬蟲機制,合理創建爬蟲和爬蟲調度機制,實現爬蟲工作自動化。使用CSS 選擇器和Xpath[5]技術獲取商品數據,針對存儲在JavaScript 中的ASIN 相關數據使用JSON 解析[6]獲取。對商品數據的存儲進行了數據庫連接優化和批量存儲優化,批量存儲使用存儲過程和表值參數[7]實現,進一步提高數據存儲效率。使用Python 和Selenium 實現商品商標的自動化查詢,將R 標的商品從選品庫中刪除,有效規避侵權的發生,為跨境電商選品提供符合市場需求且侵權概率低的數據依據。

1 反爬蟲應對方法與爬蟲設計

1.1 反爬蟲應對方法

A 站作為一個大型電商平臺,采取了多種反爬蟲機制來保護其數據和資源,包括User-Agent檢測、IP封鎖和限制、人機驗證、動態頁面和JavaScript 渲染、訪問頻率限制、Cookie 和Session 跟蹤等,大大提高了數據采集的難度。通過使用Scrapy 框架的下載中間件,支持程序在爬蟲發送請求之前和接收到響應之后進行預處理和后處理操作,為應對反爬蟲機制提供了策略和實現方法。下載中間件類的主要方法如表1所示。

表1 下載中間件類的主要方法

通過對Scrapy 框架下載中間件和爬蟲工作流程的研究,本方案針對A 站反爬蟲機制的主要應對方法如下:

第一,設置User-Agent 和Cookie,模擬真實瀏覽器發出的請求。通過自定義下載中間件類,并在process_request 方法中指定request.headers['User-Agent']和request.cookies。

第二,使用代理IP,降低被檢測和限制的概率。本方案通過搭建代理IP 管理系統,使用端口號調用不同的代理IP,使用IP 白名單實現代理IP 使用的授權,提高代理IP 使用靈活性的同時,也保證了代理IP 使用的安全性。代理IP的指定在自定義下載中間件類的process_request方法中實現,主要代碼如下:

request.meta['proxy'] = "代理IP 接口?port=%d" % port

第三,根據所需采集的數據量,設置合理的請求并發數,并設置隨機間隔請求時間,提高請求成功概率。通過指定項目CONCURRENT_REQUESTS 的值,控制爬蟲在同一時間內發送的請求數量,實現對爬取速度的調節。通過指定項目DOWNLOAD_DELAY 的值,控制爬蟲發送請求之間的延遲時間,其默認延遲時間是固定的,需要將項目RANDOMIZE_DOWNLOAD_DELAY 的值設置為True,才會實現隨機延遲,隨機延遲時間的取值范圍:

[0.5 * DOWNLOAD_DELAY,1.5 *DOWNLOAD_DELAY ]

第四,HTML 解析無法直接獲取的數據,可通過處理JavaScript 代碼構建JSON 字符串,使用json.loads( )函數將其轉換為Python 字典對象并獲取數據。

第五,當商品采集失敗且失敗次數小于設置的重試次數時,進行采集重試,提高商品采集成功率。通過RetryMiddleware 中間件處理請求出現的異常并進行重試,RETRY_ENABLED指定是否啟用重試,RETRY_TIMES 指定最大重試次數,RETRY_HTTP_CODES 指定需要重試的HTTP 狀態碼。由于A 站會將懷疑是爬蟲的請求重定向到人機驗證頁面,因此,針對發生重定向的請求也要進行請求重試。請求重試時,使用新的代理IP,提高請求成功率。本方案還對數據庫商品表進行輪詢,針對采集狀態失敗的商品在間隔一定的時間后,再次啟動爬蟲任務。

1.2 爬蟲設計

本方案將新品榜列表頁和商品詳情頁的數據采集分為兩個爬蟲實現,分別是:新品榜列表頁爬蟲(crawl_list) 和商品詳情頁爬蟲(crawl_detail)。同時,創建爬蟲調度程序,通過從數據庫中讀取需要采集的新品榜類目和需要采集的商品ASIN,自動執行相關爬蟲。以商品詳情頁爬蟲調度為例,主要流程如下:

第一,從數據庫中讀取需要采集的商品ASIN:select top 1 asin from tb_asin where isCrawl=0 and errorTime<3 and datediff(s,lastCrawlDetail-Date,getdate())>300 order by NEWID()。

第二,使用線程(threading.Thread)啟動商品詳情頁爬蟲,并將對應的ASIN使用自定義參數傳入:os.system("scrapy crawl crawl_detail-a asin=%s " % asin)。

第三,通過threading.enumerate( )控制線程并發數,當沒有商品需要采集時,暫停調度。

2 商品數據獲取與商標查詢

2.1 商品數據獲取

本方案需要采集的商品數據項包括ASIN、商品標題、銷售價格、主圖、商品屬性(顏色、尺碼等)、所屬品牌、物流方式、銷售商、供貨國家、上架時間、最新評論時間、評論數、店鋪編號等。通過對A 站相關頁面源碼的分析與多種呈現方式的總結,得出商品數據項獲取方法如表2所示。

表2 商品數據項獲取方法

當前商品ASIN 相關數據存儲在商品詳情頁的JavaScript 代碼中,HTML 解析無法直接獲取,需要按JSON 格式截取、拼接的方式構建JSON字符串,并使用json.loads( )函數將其轉化為Python字典對象,從而實現所需數據的獲取。商品ASIN 相關數據包括當前ASIN、父ASIN、商品屬性維度、各商品屬性維度包含的屬性值、映射商品屬性維度和對應的ASIN 等,如表3所示。

表3 商品ASIN相關數據

獲取商品ASIN相關數據的主要代碼如下:

script_list = sel.css('script::text').extract()

for script in script_list:

flag = script.find('"currentAsin"')

if flag != -1:

# 構建json字符串

script = '{' + script[script.find('"currentAsin'):]

script = script[0:script.find('};')] + '}'

# 使用json.loads 方法,將構建的JSON 格式的字符串解析為Python對象

json_data= json.loads(script)

# 讀取dimensionToAsinMap 屬性,該屬性映射了商品屬性維度和對應的ASIN

dimensionToAsinMap = json_data['dimensionToAsinMap']

2.2 商品商標查詢

A 站對商品侵權的處理非常嚴格,一旦檢測到賣家的商品侵權,直接下架涉嫌侵權的商品,嚴重的會凍結賬號,資金無法提現。因此,在選品時不能選擇會造成侵權的商品。商品商標包含R(REGISTER)標、TM(TradeMark)標和無商標。R 標具有排他性、獨占性、唯一性等特點,未經商標所有權人許可或授權不能使用,否則將涉及侵權;TM標若商標未經商標局核準注冊,其受法律保護的力度不大。因此,在選品時要嚴格規避選用R 標商品。在美國商標局網站(tmsearch.uspto.gov)上可以查詢商標,但使用人工查詢的方式效率太低,難以滿足大量商標的查詢和TM 標后期的跟進查詢。本方案使用Python+Selenium 操作Chrome 瀏覽器,實現商品商標自動查詢,驗證商品商標類型(R 標、TM 標、無商標),如果商標是TM標,在間隔一定時間(默認為半個月,系統可配置)后,重新檢測,驗證TM標是否轉為R標。2.2.1 Selenium自動化技術研究

Selenium 使用ChromeDriver 驅動Chrome 瀏覽器,所下載的ChromeDriver 版本需要和運行環境的Chrome 瀏覽器版本及操作系統匹配。在使用Python+Selenium 實現商品商標的自動化查詢時,可能遇到的問題及解決方法如下:

第一,遇到網站證書錯誤的問題,導致頁面無法正常打開,可以通過添加ignore-certificate-errors 參數,忽略網站證書驗證,主要代碼如下:

chrome_options = webdriver.ChromeOptions()

chrome_options.add_argument('--ignore-certificate-errors')

第二,被目標網站識別為自動化工具,導致拒絕訪問,可以通過配置瀏覽器的行為,繞過自動化工具檢測,主要代碼如下:

chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])

chrome_options.add_experimental_option('useAutomationExtension', False)

browser=webdriver.Chrome(options=chrome_options)

browser.execute_cdp_cmd(

'Page.addScriptToEvaluateOnNewDocument',

{

'source': 'Object.defineProperty(navigator,"webdriver", {get: ()=>undefined})'

}

)

2.2.2 商標自動化查詢實現

本方案通過在美國商標局網站查詢商標,來確定相應的商品是否侵權。經測試,必須通過點擊主頁的商標查詢鏈接進入商標查詢頁,才能正常使用商標查詢功能,否則會報錯,報錯信息如圖1所示。

圖1 直接訪問商標查詢頁的報錯信息

使用Python 和Selenium 技術實現商品商標自動化查詢的主要步驟及核心代碼,如表4所示。

表4 商標自動化查詢實現

3 商品數據存儲優化

3.1 數據庫連接優化

完成一次爬蟲任務往往要執行多次數據存儲,以新品榜列表頁爬蟲為例,執行一次爬蟲任務需要存儲200 多個商品基本信息,如果每次存儲都要單獨創建數據庫連接,則需要創建200 多次數據庫連接,不僅更加消耗時間、影響性能,還可能導致數據庫連接池不足,無法及時處理新的連接請求,甚至因為數據庫服務器負載過重而崩潰。Scrapy 的ITEM_PIPELINES配置項用于指定處理數據的管道,可以對爬蟲爬取到的數據做進一步處理和存儲。本方案中的數據存儲集中在數據管道類的process_item 方法中實現,不同的爬蟲通過爬蟲名稱(spider.name)加以區分,實現不同數據的存儲。同時,在open_spider 方法中創建數據庫連接,在close_spider 方法中關閉數據庫連接,一個爬蟲任務不管要存儲多少次數據,只需要創建一次數據庫連接,爬蟲任務執行完畢后,自動關閉數據庫連接。

3.2 數據批量存儲優化

當數據實時性要求較高時,為了確保數據立即被存儲至數據庫,一般使用單條存儲。單條存儲需要多次與數據庫進行交互,每次插入操作都會引起一次網絡通信和磁盤寫入開銷,對于大量并發的單條插入操作,可能引發數據庫的高負載情況,導致資源競爭和性能下降。批量存儲減少了數據庫交互、網絡通信和磁盤寫入的次數,從而提高存儲性能,但數據的存儲存在一定的滯后性。本方案中的商品數據存儲實時性要求不高,使用批量存儲提高存儲性能。本方案采集到的商品數據通過數據管道進行臨時存儲,當商品數據達到一定數量或采集結束時進行批量存儲。

SQL 字符串拼接批量存儲和存儲過程批量存儲是兩種常見的批量存儲方式。使用SQL 字符串拼接批量存儲簡單易用,但存在以下不足之處:

第一,一次性執行大量SQL 語句,需要注意SQL 語句的長度限制,避免超出數據庫的限制。

第二,每次執行SQL 語句,數據庫系統需要解析、編譯和優化該語句,并生成執行計劃,需要消耗較多的時間和系統資源,對于復雜的查詢和操作,效率更加不如存儲過程。

第三,直接使用SQL 語句容易暴露數據庫的敏感信息,同時,存在SQL注入的安全風險,攻擊者可以通過構造特殊的SQL 語句繞過身份驗證,進而提取、修改或刪除重要數據,甚至更嚴重的攻擊,安全性差[8,9]。

第四,將SQL 語句直接寫在爬蟲代碼中,一旦需要修改或優化SQL 語句,則需要修改爬蟲代碼,可維護性差。

本方案使用存儲過程實現批量存儲,相比SQL 字符串拼接批量存儲,安全性和存儲效率都更高[10]。使用表值參數傳遞批量數據,相比XML 參數性能更高,適用頻繁使用的批量數據傳遞場景。在MS SQL 中,使用表值參數,需要自定義表類型(User-Defined Table Type),用于定義表值參數的結構,包括列名、數據類型和其他約束。在Python 中使用pymssql 的Table 方法創建表值參數,使用游標的register_table方法注冊表值參數的類型。

4 結束語

文章以A 站為例,闡述了一種基于Scrapy的跨境電商新品榜數據采集方案。該方案在反爬蟲機制應對、爬蟲調度上做了優化,提高了數據采集的穩定性,構建JSON字符串并解析獲取存儲在JavaScript 中的ASIN 相關數據,提高了數據獲取的完整性,使用存儲過程和表值參數實現商品數據批量存儲,提高了數據存儲效率和安全性,降低數據庫負載,完整的實現了新品榜的商品數據自動跟蹤。該方案已投入實際使用,目前實現了A 站20 多個類目新品榜數據的自動跟蹤,性能穩定、數據完整,運營人員選品難度大大降低,選品效率提高10 倍左右。下一步將繼續優化選品算法,完善智能選品推薦和一鍵找貨源功能。

猜你喜歡
選品爬蟲批量
利用網絡爬蟲技術驗證房地產灰犀牛之說
學會這些直播帶貨的選品方式
基于Python的網絡爬蟲和反爬蟲技術研究
批量提交在配置分發中的應用
淺議社區超市的運營問題與深耕方向
淺議社區超市的運營問題與深耕方向
跨境電子商務出口貿易中選品的思路及技巧
利用爬蟲技術的Geo-Gnutel la VANET流量采集
大數據環境下基于python的網絡爬蟲技術
選品定位的“四大策略”
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合