2015-01-07 241 views
4

我想用一個python框架Scrapy從網站上抓取數據。我可以使用蜘蛛從網站獲取數據,但當我嘗試瀏覽網站時會出現問題。網頁抓取:自動按鈕點擊

根據this的帖子Scrapy不能很好地處理Javascript。

此外,正如接受的答案中所述,我不能使用mechanize或lxml。它建議使用Selenium and Scrapy的組合。

功能按鈕:

我通過網站上提供瀏覽。按鈕 的功能是顯示更多優惠。所以在點擊它時,它會調用一個加載結果的javascript 函數。

我也在看CasperJS and PhantomJS。他們會工作嗎?

我只需要自動點擊一個按鈕。我如何去做這件事?

+0

真的取決於按鈕。你能分享一下細節嗎? – alecxe

+0

如果您使用Selenium,則JavaScript將在其他普通瀏覽器中執行。您當然可以只使用Selenium IDE或WebDriver自動執行簡單的按鈕點擊。 – BadZen

回答

3

首先,是的 - 你可以使用PhantomJS ghostdriver python。它是內置在python-selenium

pip install selenium 

演示:

>>> from selenium import webdriver 
>>> driver = webdriver.PhantomJS() 
>>> driver.get('https://stackoverflow.com/questions/27813251') 
>>> driver.title 
u'javascript - Web scraping: Automating button click - Stack Overflow' 

也有提供 「scrapy +硒」 蜘蛛例子幾個其他線程:

另外還有一個scrapy-webdriver module也可以幫助它。


硒使用scrapy會給你一個巨大的開銷和緩慢下來drammatically即使有一具無頭PhantomJS瀏覽器。

您很有可能通過模擬底層請求來獲取您需要的數據來模仿「顯示更多優惠」按鈕。使用瀏覽器開發工具來探索什麼樣的請求被觸發,並使用scrapy.http.Request在蜘蛛內進行仿真。

+0

謝謝你的回答。我已經開始使用我們的答案作爲基礎。我想在這裏更詳細地瞭解一些細節。在這個例子中,你已經說明我可以使用'PhantomJS'獲得頁面標題。那麼,這裏有什麼用scrapy?我基本上想知道他們的用法之間的區別。你能解釋一下嗎? –

+1

@PrakharMohanSrivastava關鍵是scrapy不是瀏覽器,並且沒有內置的JavaScript引擎。很多網站使用JavaScript來構建他們的頁面 - 這個JavaScript代碼在瀏覽器中執行 - 瀏覽器遵循「腳本」鏈接,加載額外的js文件,執行代碼,更改DOM - 做了很多事情。對於這些網站,使用真正的瀏覽器構建頁面會更容易,就像您在瀏覽器開發人員工具中看到的那樣。然後,您可以將生成的'.page_source'提供給scrapy進行處理。希望讓事情更清楚一點。 – alecxe