1

我只是在尋找一些關於python網頁抓取的信息。我試圖從this時間表中獲得所有的數據,並且我想讓班級與其所在時間相關聯。看看html有多個表格(表格內的表格)。我打算在Python中使用Google App Engine(也許是BeautifulSoup)。任何關於這方面最好的方法的建議是?時間表與多個表的網頁刮(Python)

感謝

UPDATE:

我已經成功使用下面的代碼中提取從表中所需的數據:

import urllib 
from lxml import etree 
import StringIO 

url = "http://ttcache.dcu.ie/Reporting/Individual;Locations;id;lg25? 
template=location+Individual&weeks=20&days=1-5&periods=1-30&Width=0&Height=0" 
result = urllib.urlopen(url) 
html = result.read() 

parser = etree.HTMLParser() 
tree = etree.parse(StringIO.StringIO(html), parser) 

xpath = "//table[2]/tr/td//text()" 

filtered_html = tree.xpath(xpath) 

print filtered_html 

但我發現了很多這樣的u'\xa0', u'\xa0', '\r\n', '\r\n'字符分散在整個解析文本中。關於如何解決這些問題的任何建議?

感謝

+0

這是一個非常簡單的任務,你可以使用它的lxml庫。 – Denis 2013-03-15 12:43:17

+0

請您詳細說明一下嗎?我是lxml的新手,所以不確定從哪裏開始。謝謝 – derpyderp 2013-03-15 17:04:36

回答

1

可用於解析HTML的最佳庫是lxml的,它是基於libxml2的。雖然它的目標是用於XML解析,但它也有一個HTML解析器,它比BeautifulSoup處理標籤湯要好得多。由於解析器在C中,它也快得多。

您還可以訪問XPath來查詢HTML dom,libxml2支持XPath中的正則表達式匹配,這對於網頁抓取非常有用。

libxml2和lxml得到很好的支持,你會發現在所有主要的發行版都有它們的包。谷歌應用程序引擎似乎支持它,以及如果你正在使用2.7 https://developers.google.com/appengine/docs/python/tools/libraries27

編輯:

你得到的字符是有很多網頁上的空表格單元格的,所以你的XPath因通常是匹配空格字符(這是不間斷的空格)。您可以跳過不帶非空格字符的文本節點用正則表達式是這樣的:

xpath = "//table[2]/tr/td//text()[re:match(., '\\S')]" 

filtered_html = tree.xpath(
    xpath, 
    namespaces={"re": "http://exslt.org/regular-expressions"}) 

的命名空間位只是告訴你想用它的正則表達式擴展LXML。

+0

感謝您的回覆。你能建議任何有益的鏈接/教程嗎?我以前沒有使用lxml,但聽起來很有趣! – derpyderp 2013-03-15 17:03:48

+0

開始的最佳地點可能是文檔:http://lxml.de/lxmlhtml.html它有一堆顯示如何做各種事情的例子。 – Steve 2013-03-15 17:23:36

+0

謝謝。如果有一個問題,我遇到了一些問題,如果你不介意看看,我會在上面的更新中描述它們! – derpyderp 2013-03-15 18:48:23