2016-10-18 72 views
1

我試圖刮研究網站,我卡住了。我希望刮板讀取頁面源代碼,並將其附加到本地HTML文件中,以便我可以分析校外數據。我已經嘗試了BeautifulSoupScrapy,但我發現我需要使用Selenium與頁面進行交互以瀏覽我的大學的認證系統。 (我不包括那個代碼,因爲它與我的問題相關)。如何刮頁HTML並遵循硒中的下一個鏈接

當我運行腳本時,它導航到頁面並單擊鏈接,但它只保存第一頁的HTML。然後它會在每次點擊鏈接時重複並追加該頁面的HTML。

如何使用Selenium點擊下一頁鏈接,刮掉HTML並保存到文件,直到到達最後一頁?

source = driver.page_source 

while True: 
    with open("test.html", "a") as TestFile: 
     TestFile.write(source) 
     try: 
      driver.implicitly_wait(200) 
      driver.find_element_by_css_selector('li.next').click() 
     except AttributeError: 
      break 

編輯:我添加除AttributeError的到和接收到的下面的錯誤。

selenium.common.exceptions.StaleElementReferenceException:消息: 陳舊元素參考:元素沒有連接到網頁文件

我的假設是,我需要放慢.click(),這是爲什麼我原本有隱含的等待,但似乎並沒有這樣做。

+0

擺脫你赤裸的,除了你會得到一個更錯誤提示信息 – n1c9

+0

感謝n1c9,我增加了一個AttributeError的,除了它給了我在上面添加的錯誤代碼:StaleElementReferenceException。 – woodNUFC

+0

頁面上是否有任何彈出窗口或類似內容?或者它是否正常翻轉到下一頁?另外,當初始化webdriver時,應該設置'implicitly_wait(num)',但這只是一種風格。 – n1c9

回答

0

您需要在while循環內指定page sourcesource變量。

source = driver.page_source 

while True: 
with open("test.html", "a") as TestFile: 
    TestFile.write(source) 
    try: 
     driver.implicitly_wait(200) 
     driver.find_element_by_css_selector('li.next').click() 
     source = driver.page_source 
    except AttributeError: 
     break 
+0

謝謝!這有幫助,但現在我在每個頁面的輸出中都有重複項。例如,它輸出:Page1Page1 Page1Page2Page2Page2Page3Page3 – woodNUFC

+0

點擊下一個鏈接後,讓腳本等待一段時間,然後獲取頁面源代碼。 –

+0

我已經添加了一個等待,就像你建議的那樣,它現在似乎正在工作。謝謝,@SudharsanSelvaraj – woodNUFC