【问题标题】:Timetable Web Scraping with multiple tables (Python)具有多个表的时间表 Web 抓取 (Python)
【发布时间】:2013-03-15 12:40:14
【问题描述】:

我只是在寻找有关 python 网络抓取的一些信息。我正在尝试从this 时间表中获取所有数据,并且我希望将课程链接到其开启时间。查看 html 有多个表(表中的表)。我打算将 Google App Engine 与 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' 字符散布在整个解析的文本中。关于如何解决这些问题有什么建议吗?

谢谢

【问题讨论】:

  • 这是一个非常简单的任务,您可以使用 lxml lib 来完成它。
  • 您能详细说明一下吗?我是 lxml 的新手,所以不知道从哪里开始。谢谢

标签: python google-app-engine google-cloud-datastore web-scraping beautifulsoup


【解决方案1】:

可用于解析 HTML 的最佳库是 lxml,它基于 libxml2。虽然它是为 XML 解析而设计的,但它也有一个 HTML 解析器,它对标签汤的处理比 BeautifulSoup 好得多。由于解析器在 C 中,它也快得多。

您还可以访问 XPath 以查询 HTML dom,libxml2 支持 XPaths 中的正则表达式匹配,这对于网络抓取非常有用。

libxml2 和 lxml 得到很好的支持,您会发现所有主要发行版上都有它们的软件包。如果您使用的是 2.7 https://developers.google.com/appengine/docs/python/tools/libraries27,Google App 引擎似乎也支持它

编辑:

你得到的字符是由于页面上有很多空的表格单元格,所以你的 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.de/lxmlhtml.html 它有一堆例子展示了如何做各种事情。
  • 谢谢。对它进行了破解,但我遇到了一些问题,如果您不介意看一下,我已经在上面的更新中描述了它们!
  • 我添加了更多信息。
  • 这样就解决了问题。有没有办法将讲座(即每个单元格)链接到其指定时间?我认为这些空格现在可以派上用场了。顺便说一句,它在应用程序引擎上运行良好,我只想将时间与讲座联系起来以存储在数据存储中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
  • 2021-03-09
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多