Python用不正确的html结构废弃数据

2024-09-30 16:41:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

*** REST OF CODE OMITTED ***
try:
    fullURL = blitzurl + movie
    opener.open(blitzurl)
    urllib2.install_opener(opener)
    request = urllib2.Request(fullURL)
    requestData = urllib2.urlopen(request)
    htmlText = BeautifulSoup(requestData.read())

    #panel = htmlText.find(match_class(["panelbox"]))
    #table = htmlText.find("table", {"id" : "scheduletbl"})
    print htmlText

blah....

except Exception, e:
    print str(e)
    print "ERROR: ERROR OCCURED IN MAIN"

我试图获取id为“scheduletbl”的表的内容(该表位于div中一个名为“panelbox”的类

html代码如下所示:

^{pr2}$

我遇到的问题是,当我试图根据div id提取内容时,它会在中间被切断(我猜是因为不正确的结束标记)。在

当我试图基于(使用其id)提取内容时,也会发生这种情况。它也会在中间被切断,因为有一个,它不应该在那里。在

解决这个问题最好的办法是什么?我无法控制这些数据,因为它是从某个网站上删除的。在


Tags: 代码id内容requesttablefindopenerurllib2
3条回答

如果您想检查哪个工具/库最适合您执行此任务,可以尝试使用https://scraperwiki.com/-。在

有一个选项可以使用html5lib、pyquery、bs4等(测试简单)

你可以试试beautifulsoup:

BeautifulSoup(html).prettify()

其中html是您的内容

BS应该擅长处理糟糕的html。。。在

re.search(r'id="scheduletbl".+?</table>', page, re.DOTALL) 

如果涉及换行符,则执行dotall。这是丑陋而非美丽的方式

如果使用python默认附带的解析器,不正确的结束标记可能会产生问题。正如Beautiful soup文档中所说的那样:不是非常宽大(在Python2.7.3或3.2.2之前)。在

因此,如果您使用之前的版本,您可以安装lxml的HTML解析器,它更为宽松

$ pip install lxml

或者,如果您想要与浏览器相同的html解析,您可以安装html5lib解析器

^{pr2}$

它们可能会更好地解析HTML,并对错误的标记关闭有弹性。Beautiful soup会自动选择您安装的最佳解析器。在

相关问题 更多 >