8

我想用Greasemonkey抓取一個站點,並想知道是否有比GM_setValue更好的臨時存儲值的方法。爲基於Greasemonkey的搜尋器存儲數據的最佳方法?

我想要做的是在社交網絡中抓取我的聯繫人,並從他們的個人資料頁面中提取Twitter網址。

我目前的計劃是打開它自己的選項卡中的每個配置文件,使它看起來更像一個正常的瀏覽人(即CSS,scrits和圖像將由瀏覽器加載)。然後用GM_setValue存儲Twitter網址。一旦所有配置文件頁面被抓取後,使用存儲的值創建一個頁面。

雖然我對存儲選項並不滿意。也許有更好的方法?

我曾考慮將用戶配置文件插入當前頁面,以便我可以使用相同的腳本實例處理它們,但我不確定XMLHttpRequest是否顯示對普通用戶啓動的請求無法判斷。

回答

4

我有一個類似的項目,我需要從網站獲取大量(發票行數據),並將其導出到會計數據庫中。

您可以創建一個.aspx(或PHP等)後端,它處理POST數據並將其存儲在數據庫中。

任何你想從一個頁面獲得的數據都可以存儲在一個表單中(如果你願意,可以使用樣式屬性隱藏),使用字段名或id來標識數據。然後,您只需將表單操作設置爲.aspx頁面並使用javascript提交表單即可。

(或者,您可以向頁面添加一個提交按鈕,允許您在提交到數據庫之前檢查表單值)。

1

你認爲Google Gears?這會讓你訪問一個本地的SQLite數據庫,你可以存儲大量的信息。

2

我想你應該首先問自己爲什麼你想使用Greasemonkey來解決你的問題。開發Greasemonkey是一種修改個人瀏覽體驗的方式 - 而不是網頁蜘蛛。雖然您可能可以通過GM_setValue使Greasemonkey執行此操作,但我認爲您會發現您的解決方案非常糟糕並且很難開發。這需要很多手動步驟(例如打開所有這些選項卡,清除腳本運行之間的Greasemonkey變量等)。

你在做什麼都需要執行頁面上的JavaScript?如果是這樣,你可能要考慮使用Perl和WWW::Mechanize::Plugin::JavaScript。否則,我會建議你在一個簡單的Python腳本中完成所有這些。您需要查看urllib2模塊。例如,看看下面的代碼(注意,它使用cookielib如果你的腳本需要您登錄到一個站點,以支持cookie,你很可能需要):

import urllib2 
import cookielib 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar())) 
response = opener.open("http://twitter.com/someguy") 
responseText = response.read() 

然後,你可以做所有使用正則表達式的處理。

+0

想要Greasemonkey的原因是要抓取的頁面並不真正批准機器人。 Greasemonkey似乎是使爬蟲看起來合法的最簡單方法。 – 2009-07-02 10:38:04

1

之所以希望的Greasemonkey 是被抓取的頁面不 沒有真正認可的機器人。 Greasemonkey似乎是最簡單的 的方式,使爬蟲看起來合理的 。

實際上通過瀏覽器來檢測爬蟲程序並不會使它更合理。您仍然違反網站的使用條款!例如WWW :: Mechanize同樣非常適合於'欺騙'你的用戶代理字符串,但是如果網站不允許蜘蛛/爬蟲不合法,那麼爬行就是這樣。

0

想要Greasemonkey的原因是要抓取的頁面並不真正贊同機器人。 Greasemonkey似乎是使爬蟲看起來合法的最簡單方法。

我認爲這是讓爬蟲看起來合法的最難想象的方法。通過對HTTP頭的一些基本理解,欺騙Web瀏覽器非常簡單。

此外,一些網站有啓發式,尋找像蜘蛛行爲的客戶端,所以簡單地使請求看起來像瀏覽器並不意味着不會知道你在做什麼。

+0

我不認爲設置正確的標題就足夠了。您還必須加載圖像,觸發AJAX請求,而不是。 – 2010-11-28 17:04:10