說在開頭
因公司需求,為減少工作成本,需采集一些店鋪的數據,並且需插入線上數據庫。
采集思路
HTML代碼分析神器(HtmlAgilityPack),其次就是分析阿里巴巴的店鋪數據規則。我這里的思路是,先在搜索欄根據關鍵詞和地區搜索,然后根據結果分析出店鋪的URL。再根據店鋪的URL進去店鋪,找到“所有分類頁”,解析所有類目,再根據類目URL獲取該類目下的產品數據。找到產品URL后,進入到產品頁面,解析需要的產品信息,這是我個人的采集思路。下面介紹下每個步驟需要重點注意的地方。
1、分析店鋪URL
先上圖

URL規則為:http://s.1688.com/company/company_search.htm?keywords={搜索關鍵詞}&province={所在地區}&pageSize=30&sortType=pop&beginPage=1
keywords、province都為漢字,需采用GBK編碼(阿里都是GBK編碼),然后傳入URL中,beginPage為頁碼,這里必須為1,如果手動修改此參數,將觸發阿里的安全驗證。其實這一步就是難點,重點是如何去突破這個安全驗證。開始采集的時候,是通過上面的URL把HTML源代碼下載下來分析,但是到了第二頁的時候每次都會出發阿里的安全驗證,后面找了好多方法都無法突破,后來只能采用webBrowser去模擬點擊,跳轉到下一頁。
突破阿里分頁嘗試過程(未使用webBrowser前):
1、從URL下手,無論怎么弄都會觸發這個規則。
2、查看源碼看看點擊下一頁發生了什么,這是你就會發現這么段HTML

翻頁時會觸發這個form,請中有兩個驗證參數,UA和TOKEN,這些加密字符是通過下面那個UA.JS動態生成的,更BT的是UA這個參數中的字符會通過鼠標的操作(點擊、移動等)動態修改,UA必須修改后才能通過驗證(后面就沒有怎么去研究這個東西了,直接換思路)。到這里才想到用webBrowser去動態模擬鼠標移動,並且點擊頁面的下一頁按鈕。這就是上圖為什么會出現一個webBrowser、模擬移動、模擬點擊三個按鈕了。
接下來講下怎么去模擬鼠標的移動和點擊,這里采用的是調用WINDOWS API,這里不清楚的可以去找找資料。

其實就是模擬操作,讓那兩個加密參數自動處理好之后,再模擬點擊頁面的下一頁,這樣就不會出現安全驗證了。
完整的順序是:先通過第一頁URL,加載到webBrowser中,然后在webBrowser的DocumentCompleted(HTML文檔全部加載完成)事件中,先用WINDOWS API調用模擬鼠標移動,這時那個驗證參數就已經開始改變了,這里休眠500毫秒。然后再調用點擊下一頁的按鈕,這樣webBrowser里面會更新第二頁數據,然后再拿出來分析,剩下的就是重復上面的工作了。

需要說明下兩個按鈕都需要要有自己的事件,還有就是采集的時候,鼠標不能自己去移動。
好了,到這里你已經拿到公司的URL了,接下來就是分析每個店鋪,獲取產品數據了。
2、分析產品數據
這里就沒有什么安全驗證了,我就沒有采用webBrowser,而是直接通過URL下載HTML代碼字符分析,如果采集頻繁的話,可以動態設置代理。阿里的店鋪URL都是非常規則的http://{用戶名}.1688.com/,您可以獲取到這個用戶名,這是唯一的標識,后面可以通過這個來判斷該店鋪是否已經采集。

過程:
1、通過店鋪首頁URL分析得出“公司檔案”頁面,規則為http://{用戶名}.1688.com/page/creditdetail.htm,這里可以得到公司的一些基本信息(公司名稱、聯系人、電話、手機、地址、簡介等)。
2、解析類目信息,規則為http://{用戶名}.1688.com/page/offerlist.htm,這里只需要拿到該店鋪所有類目ULR,提供下XPATH(//div[@class='wp-category-nav-unit']/ul/li)。

3、分析類目編號,再第二步的基礎上,通過URL拿到類目編號,規則為offerlist_{類目編號}.htm,這里說下,有些店鋪的類目是有兩級到三級的,我這里只統一取第一級。
4、獲取分下的產品數據,規則http://{用戶名}.1688.com/page/offerlist_{類目編號}.htm?pageNum={頁碼},拿出HTML分析就好了,提供下XPATH(頁碼的://em[@class='page-count']沒有找到就只有一頁;產品的://ul[@class='offer-list-row']/li),產品URL圖。

5、獲取產品詳情,規則http://detail.1688.com/offer/{產品編號}.html,通過上圖解析的URL,獲得產品編號,由此來判斷是否已經采集過該商品。接下來就是通過HTML去分析您需要的東西了。這里只有一個需要注意的地方,就是產品描述是通過AJAX動態加載的。

找到data-tfs-url,然后下面里面的內容就是產品描述了。
最后就是入庫了,把采集的字段和您的數據庫字段對應就OK了。
好了,所有步驟的已經講解完成了,如果思路還不錯,請各位看官點個“推薦”喔!!!
