2013-06-28 17 views
2

我想從大約1000-2000個不同的餐館網站上獲取聯繫信息。幾乎所有人都在主頁或某種「聯繫」頁面上都有聯繫信息,但沒有兩個網站完全相同(即沒有共同的利用模式)。我怎樣才能可靠地從這些網站抓取電子郵件/電話號碼信息,而無需專門將Python腳本指向頁面上的特定元素(即腳本需要與結構無關,因爲每個站點都有獨特的HTML結構,都有,例如,他們的聯繫信息在「聯繫人」div)。用Python刻錄幾個獨特站點的聯繫信息

我知道沒有辦法編寫一個100%有效的程序,我只想盡量提高命中率。

任何有關這方面的指導 - 從哪裏開始,要閱讀什麼 - 將不勝感激。

謝謝。

回答

1

查看python的正則表達式模塊。 你可以寫一個簡單的表達,如:

re.search(u"\(\d{3}\) \d{3}-\d{4}",string) 

,並找到任何標準格式的手機串號(代表美國)。 它看起來像亂碼,但一旦你做,它應該讓網絡抓取變得更容易。 這裏有一個體面的入門教程:

http://www.tutorialspoint.com/python/python_reg_expressions.htm

我也強烈建議硒網絡,如果你遇到了太多動態網頁刮:

https://pypi.python.org/pypi/selenium

+0

很好,謝謝。如果主頁上沒有電子郵件/電話匹配,找到網站聯繫頁面的最佳方式是什麼?只需在頁面上查找「聯繫人」中的鏈接?由於我要在多達2000個不同的網站上運行這個腳本,我不想一定要搜索每個錨元素(除非這是唯一的方法),爲了節省時間/保持程序不受影響崩潰。有任何想法嗎? – sundance

+0

希望他們中的大多數會像你說的那樣將它放在主頁上(這可能有點愚蠢)。我建議首先搜索主頁,然後在鏈接文本中使用「聯繫」頁面(可以使用BeautifulSoup來獲取這些頁面)。之後,您可以單獨處理問題網站 - 如果必須猜測,您應該只有100個左右。 – ejk314

1

在大多數國家,電話號碼遵循極少數定義明確的模式之一,可以用簡單的正則表達式匹配 - 同樣,電子郵件地址具有國際公認的格式 - 只需簡單地刮掉主頁,聯繫人或聯繫我們頁面,然後解析使用正則表達式 - 您應該輕鬆實現90%以上的準確性。

當然,您也可以簡單地將餐廳名稱和城鎮提交到黃頁網站的當地等同物。