因公司需求,爲減小工做成本,需採集一些店鋪的數據,而且需插入線上數據庫。html
HTML代碼分析神器(HtmlAgilityPack),其次就是分析阿里巴巴的店鋪數據規則。我這裏的思路是,先在搜索欄根據關鍵詞和地區搜索,而後根據結果分析出店鋪的URL。再根據店鋪的URL進去店鋪,找到「全部分類頁」,解析全部類目,再根據類目URL獲取該類目下的產品數據。找到產品URL後,進入到產品頁面,解析須要的產品信息,這是我我的的採集思路。下面介紹下每一個步驟須要重點注意的地方。web
先上圖數據庫
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前):加密
一、從URL下手,不管怎麼弄都會觸發這個規則。url
二、查看源碼看看點擊下一頁發生了什麼,這是你就會發現這麼段HTMLspa
翻頁時會觸發這個form,請中有兩個驗證參數,UA和TOKEN,這些加密字符是經過下面那個UA.JS動態生成的,更BT的是UA這個參數中的字符會經過鼠標的操做(點擊、移動等)動態修改,UA必須修改後才能經過驗證(後面就沒有怎麼去研究這個東西了,直接換思路)。到這裏纔想到用webBrowser去動態模擬鼠標移動,而且點擊頁面的下一頁按鈕。這就是上圖爲何會出現一個webBrowser、模擬移動、模擬點擊三個按鈕了。代理
接下來說下怎麼去模擬鼠標的移動和點擊,這裏採用的是調用WINDOWS API,這裏不清楚的能夠去找找資料。orm
其實就是模擬操做,讓那兩個加密參數自動處理好以後,再模擬點擊頁面的下一頁,這樣就不會出現安全驗證了。
完整的順序是:先經過第一頁URL,加載到webBrowser中,而後在webBrowser的DocumentCompleted(HTML文檔所有加載完成)事件中,先用WINDOWS API調用模擬鼠標移動,這時那個驗證參數就已經開始改變了,這裏休眠500毫秒。而後再調用點擊下一頁的按鈕,這樣webBrowser裏面會更新第二頁數據,而後再拿出來分析,剩下的就是重複上面的工做了。
須要說明下兩個按鈕都須要要有本身的事件,還有就是採集的時候,鼠標不能本身去移動。
好了,到這裏你已經拿到公司的URL了,接下來就是分析每一個店鋪,獲取產品數據了。
這裏就沒有什麼安全驗證了,我就沒有采用webBrowser,而是直接經過URL下載HTML代碼字符分析,若是採集頻繁的話,能夠動態設置代理。阿里的店鋪URL都是很是規則的http://{用戶名}.1688.com/,您能夠獲取到這個用戶名,這是惟一的標識,後面能夠經過這個來判斷該店鋪是否已經採集。
過程:
一、經過店鋪首頁URL分析得出「公司檔案」頁面,規則爲http://{用戶名}.1688.com/page/creditdetail.htm,這裏能夠獲得公司的一些基本信息(公司名稱、聯繫人、電話、手機、地址、簡介等)。
二、解析類目信息,規則爲http://{用戶名}.1688.com/page/offerlist.htm,這裏只須要拿到該店鋪全部類目ULR,提供下XPATH(//div[@class='wp-category-nav-unit']/ul/li)。
三、分析類目編號,再第二步的基礎上,經過URL拿到類目編號,規則爲offerlist_{類目編號}.htm,這裏說下,有些店鋪的類目是有兩級到三級的,我這裏只統一取第一級。
四、獲取分下的產品數據,規則http://{用戶名}.1688.com/page/offerlist_{類目編號}.htm?pageNum={頁碼},拿出HTML分析就行了,提供下XPATH(頁碼的://em[@class='page-count']沒有找到就只有一頁;產品的://ul[@class='offer-list-row']/li),產品URL圖。
五、獲取產品詳情,規則http://detail.1688.com/offer/{產品編號}.html,經過上圖解析的URL,得到產品編號,由此來判斷是否已經採集過該商品。接下來就是經過HTML去分析您須要的東西了。這裏只有一個須要注意的地方,就是產品描述是經過AJAX動態加載的。
找到data-tfs-url,而後下面裏面的內容就是產品描述了。
最後就是入庫了,把採集的字段和您的數據庫字段對應就OK了。
好了,全部步驟的已經講解完成了,若是思路還不錯,請各位看官點個「推薦」喔!!!