多表时间表Web抓取(Python)

多表时间表Web抓取(Python),python,google-app-engine,google-cloud-datastore,web-scraping,beautifulsoup,Python,Google App Engine,Google Cloud Datastore,Web Scraping,Beautifulsoup,我只是想了解一些关于python web抓取的信息。我正试图从时间表中获取所有数据,我想把课程与上课时间联系起来。查看html有多个表(表中的表)。我计划将Google应用程序引擎与Python结合使用(可能还包括BeautifulSoup)。有没有关于这方面的最佳方法的建议 谢谢 更新: 我已使用以下代码设法从表中提取所需的数据: import urllib from lxml import etree import StringIO url = "http://ttcache.dcu.ie

我只是想了解一些关于python web抓取的信息。我正试图从时间表中获取所有数据,我想把课程与上课时间联系起来。查看html有多个表(表中的表)。我计划将Google应用程序引擎与Python结合使用(可能还包括BeautifulSoup)。有没有关于这方面的最佳方法的建议

谢谢

更新:

我已使用以下代码设法从表中提取所需的数据:

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'
字符,这些字符分散在解析的文本中。对我如何应对这些问题有什么建议吗


谢谢

解析HTML的最佳库是lxml,它基于libxml2。尽管它用于XML解析,但它也有一个HTML解析器,它比BeautifulSoup更好地处理标记汤。由于解析器使用C语言,因此速度也快得多

您还可以访问XPath来查询HTMLDOM,并在XPath中支持正则表达式匹配的libxml2,这对于web抓取非常有用

libxml2和lxml得到了很好的支持,您会发现在所有主要发行版上都有相应的软件包。如果你使用的是2.7,谷歌应用引擎似乎也支持它

编辑:

您得到的字符是由于页面上有很多空的表单元格,因此xpath通常与空白字符(非间断空格)匹配。您可以使用以下正则表达式跳过那些没有非空格字符的文本节点:

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

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

名称空间位只是告诉lxml您要使用它的正则表达式扩展。

解析HTML的最佳库是lxml,它基于libxml2。尽管它用于XML解析,但它也有一个HTML解析器,它比BeautifulSoup更好地处理标记汤。由于解析器使用C语言,因此速度也快得多

您还可以访问XPath来查询HTMLDOM,并在XPath中支持正则表达式匹配的libxml2,这对于web抓取非常有用

libxml2和lxml得到了很好的支持,您会发现在所有主要发行版上都有相应的软件包。如果你使用的是2.7,谷歌应用引擎似乎也支持它

编辑:

您得到的字符是由于页面上有很多空的表单元格,因此xpath通常与空白字符(非间断空格)匹配。您可以使用以下正则表达式跳过那些没有非空格字符的文本节点:

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

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

名称空间位只是告诉lxml您想要使用它的正则表达式扩展。

这是一个非常简单的任务,您可以使用lxml库来完成它。您能详细说明一下吗?我是lxml新手,所以不知道从哪里开始。谢谢这是一个非常简单的任务,你可以使用lxml库来完成。你能详细说明一下吗?我是lxml新手,所以不知道从哪里开始。谢谢你的回复。你能推荐一些有用的链接/教程吗?我以前没有用过lxml,但听起来很有趣!最好的起点可能是文档:它有一堆示例,展示了如何做各种事情。谢谢。有一个裂纹在它,我有一些问题,我已经描述了他们在上面的更新,如果你不介意看看!我添加了更多的信息。这解决了问题。是否有办法将讲座(即每个单元)链接到其指定的时间?我想那些空格现在可能有用了。顺便说一句,它在appengine上运行得很好,我只想把《泰晤士报》和讲座链接起来,存储在一个数据存储中。谢谢你的回复。你能推荐一些有用的链接/教程吗?我以前没有用过lxml,但听起来很有趣!最好的起点可能是文档:它有一堆示例,展示了如何做各种事情。谢谢。有一个裂纹在它,我有一些问题,我已经描述了他们在上面的更新,如果你不介意看看!我添加了更多的信息。这解决了问题。是否有办法将讲座(即每个单元)链接到其指定的时间?我想那些空格现在可能有用了。顺便说一句,它在appengine上运行得很好,我只想把《泰晤士报》与讲座链接起来,存储在数据存储中。