說在開頭
因公司需求,為減少工作成本,需采集一些店鋪的資料,并且需插入線上資料庫。
采集思路
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了。
好了,所有步驟的已經講解完成了,如果思路還不錯,請各位看官點個“推薦”喔!!!
作者:LyIng.Net
出處:http://www.cnblogs.com/jiangbiao/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。