前面文章的測試案例都用到了集搜客Gooseeker提供的規則提取器,在網頁抓取工做中,調試正則表達式或者XPath都是特別繁瑣的,耗時耗力,工做枯燥,若是有一個工具能夠快速生成規則,並且能夠可視化的即時驗證,就能把程序員解放出來,投入到創造性工做中。html
以前文章所用的例子中的規則都是固定的,如何自定義規則再結合提取器提取咱們想要的網頁內容呢?對於程序員來講,理想的目標是掌握一個通用的爬蟲框架,每增長一個新目標網站就要跟着改代碼,這顯然不是好工做模式。這就是本篇文章的主要內容了,本文使用一個案例說明怎樣將新定義的採集規則融入到爬蟲框架中。也就是用可視化的集搜客GooSeeker爬蟲軟件針對亞馬遜圖書商品頁作一個採集規則,並結合規則提取器抓取網頁內容。python
進入集搜客官網產品頁面,下載對應版本。個人電腦上已經安裝了Firefox 38,因此這裏只需下載爬蟲。
git
打開Firefox –> 點擊菜單工具 –> 附加組件 –> 點擊右上角附加組件的工具 –> 選擇從文件安裝附加組件 -> 選中下載好的爬蟲xpi文件 –> 當即安裝
下一步
下一步
程序員
點擊瀏覽器菜單:工具-> MS謀數臺 彈出MS謀數臺窗口。github
在網址欄輸入咱們要採集的網站連接,而後回車。當頁面加載完成後,在工做臺頁面依次操做:命名主題名 -> 建立規則 -> 新建整理箱 -> 在瀏覽器菜單選擇抓取內容,命名後保存。
web
打開集搜客Gooseeke官網,註冊登錄後進入會員中心 -> API -> 申請API
正則表達式
(下載地址: gooseeker/core at master · FullerHua/gooseeker · GitHub), 選擇一個存放目錄,這裏爲E:demogooseeker.pysegmentfault
如這裏爲E:Demothird.py,再以記事本打開,敲入代碼:
註釋:代碼中的31d24931e043e2d5364d03b8ff9cc77e 就是API KEY,用你申請的代替;amazon_book_pc 是規則的主題名,也用你的主題名代替瀏覽器
# -*- coding: utf-8 -*- # 使用GsExtractor類的示例程序 # 以webdriver驅動Firefox採集亞馬遜商品列表 # xslt保存在xslt_bbs.xml中 # 採集結果保存在third文件夾中 import os import time from lxml import etree from selenium import webdriver from gooseeker import GsExtractor # 引用提取器 bbsExtra = GsExtractor() bbsExtra.setXsltFromAPI("31d24931e043e2d5364d03b8ff9cc77e", "amazon_book_pc") # 設置xslt抓取規則 # 建立存儲結果的目錄 current_path = os.getcwd() res_path = current_path + "/third-result" if os.path.exists(res_path): pass else: os.mkdir(res_path) # 驅動火狐 driver = webdriver.Firefox() url = "https://www.amazon.cn/s/ref=sr_pg_1?rh=n%3A658390051%2Cn%3A!658391051%2Cn%3A658414051%2Cn%3A658810051&page=1&ie=UTF8&qid=1476258544" driver.get(url) time.sleep(2) # 獲取總頁碼 total_page = driver.find_element_by_xpath("//*[@class='pagnDisabled']").text total_page = int(total_page) + 1 # 用簡單循環加載下一頁連接(也能夠定位到下一頁按鈕,循環點擊) for page in range(1,total_page): # 獲取網頁內容 content = driver.page_source.encode('utf-8') # 獲取docment doc = etree.HTML(content) # 調用extract方法提取所需內容 result = bbsExtra.extract(doc) # 保存結果 file_path = res_path + "/page-" + str(page) + ".xml" open(file_path,"wb").write(result) print('第' + str(page) + '頁採集完畢,文件:' + file_path) # 加載下一頁 if page < total_page - 1: url = "https://www.amazon.cn/s/ref=sr_pg_" + str(page + 1) + "?rh=n%3A658390051%2Cn%3A!658391051%2Cn%3A658414051%2Cn%3A658810051&page=" + str(page + 1) + "&ie=UTF8&qid=1476258544" driver.get(url) time.sleep(2) print("~~~採集完成~~~") driver.quit()
打開命令提示窗口,進入third.py文件所在目錄,輸入命令 :python third.py 回車
網絡
進入third.py文件所在目錄,找到名稱爲result-2的文件夾而後打開
製做規則時,因爲定位選擇的是偏好id,而採集網址的第二頁對應頁面元素的id屬性有變化,因此第二頁內容提取出現了問題,而後對照了一下網頁元素髮現class是同樣的,果斷將定位改成了偏好class,這下提取就正常了。下一篇《在Python3.5下安裝和測試Scrapy爬網站》簡單介紹Scrapy的使用方法。