999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

跨境電商新品榜數(shù)據(jù)自動跟蹤研究與實現(xiàn)

2023-02-22 09:14:42葉文全
電大理工 2023年4期
關鍵詞:數(shù)據(jù)庫方法

葉文全

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

0 引言

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

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

1.1 反爬蟲應對方法

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

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

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

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

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

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

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

[0.5 * DOWNLOAD_DELAY,1.5 *DOWNLOAD_DELAY ]

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

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

1.2 爬蟲設計

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

第一,從數(shù)據(jù)庫中讀取需要采集的商品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使用自定義參數(shù)傳入:os.system("scrapy crawl crawl_detail-a asin=%s " % asin)。

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

2 商品數(shù)據(jù)獲取與商標查詢

2.1 商品數(shù)據(jù)獲取

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

表2 商品數(shù)據(jù)項獲取方法

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

表3 商品ASIN相關數(shù)據(jù)

獲取商品ASIN相關數(shù)據(jù)的主要代碼如下:

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

for script in script_list:

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

if flag != -1:

# 構(gòu)建json字符串

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

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

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

json_data= json.loads(script)

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

dimensionToAsinMap = json_data['dimensionToAsinMap']

2.2 商品商標查詢

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

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

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

chrome_options = webdriver.ChromeOptions()

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

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

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 商標自動化查詢實現(xiàn)

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

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

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

表4 商標自動化查詢實現(xiàn)

3 商品數(shù)據(jù)存儲優(yōu)化

3.1 數(shù)據(jù)庫連接優(yōu)化

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

3.2 數(shù)據(jù)批量存儲優(yōu)化

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

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

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

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

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

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

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

4 結(jié)束語

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

猜你喜歡
數(shù)據(jù)庫方法
學習方法
數(shù)據(jù)庫
財經(jīng)(2017年15期)2017-07-03 22:40:49
數(shù)據(jù)庫
財經(jīng)(2017年2期)2017-03-10 14:35:35
數(shù)據(jù)庫
財經(jīng)(2016年15期)2016-06-03 07:38:02
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
數(shù)據(jù)庫
財經(jīng)(2016年3期)2016-03-07 07:44:46
數(shù)據(jù)庫
財經(jīng)(2016年6期)2016-02-24 07:41:51
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚
主站蜘蛛池模板: 国产亚洲现在一区二区中文| 欧美色视频在线| 欧美黄色a| 国产女人喷水视频| 色视频国产| 在线欧美日韩| 欧美成人在线免费| 欧美中文字幕一区| 日韩在线第三页| 伊在人亞洲香蕉精品區| 欧美日韩另类国产| 91网站国产| a级毛片一区二区免费视频| 欧美精品色视频| 亚洲第一网站男人都懂| 久久99精品久久久久纯品| 欧美一级视频免费| 日本在线欧美在线| 成人毛片免费在线观看| 国产经典在线观看一区| 9966国产精品视频| 成人精品午夜福利在线播放| 国产在线一区视频| 在线看AV天堂| 亚洲精品自产拍在线观看APP| 四虎影视无码永久免费观看| 深夜福利视频一区二区| 亚洲h视频在线| 久久亚洲中文字幕精品一区| 在线无码av一区二区三区| 国产激情第一页| 无码日韩视频| 日韩一区二区在线电影| 欧美成人区| 色偷偷一区| 国产成人成人一区二区| 3p叠罗汉国产精品久久| 日本人又色又爽的视频| 中文字幕在线视频免费| a级毛片在线免费| 国产网友愉拍精品| 亚洲AⅤ综合在线欧美一区| 香蕉eeww99国产在线观看| 茄子视频毛片免费观看| 亚洲浓毛av| 日本在线亚洲| 亚洲无线一二三四区男男| 亚洲日本一本dvd高清| 国产精品页| 2020国产免费久久精品99| 一本久道热中字伊人| 天堂av综合网| 女人18一级毛片免费观看| 激情视频综合网| 欧美日本不卡| 日本免费福利视频| 91口爆吞精国产对白第三集| 午夜日本永久乱码免费播放片| 狠狠躁天天躁夜夜躁婷婷| 亚洲国产精品人久久电影| av大片在线无码免费| 毛片免费试看| 国产农村妇女精品一二区| 波多野结衣二区| 亚洲国产精品日韩专区AV| 97av视频在线观看| 日本一区二区三区精品国产| 亚洲精品免费网站| 51国产偷自视频区视频手机观看| 亚洲天堂网视频| 天天操天天噜| 国产女人水多毛片18| 成年女人a毛片免费视频| 国产精品一区二区无码免费看片| 欧美成人国产| 日韩区欧美区| 在线精品亚洲一区二区古装| 成年人免费国产视频| 九九九九热精品视频| 日本少妇又色又爽又高潮| 乱系列中文字幕在线视频| 无码网站免费观看|