在python中解析html5 data- *属性?

时间:2013-02-14 19:28:54

标签: scrapy custom-data-attribute

是否可以从python访问html元素的data- *部分?我正在使用scrapy并且data- *在选择器对象中不可用,尽管原始数据在Request对象中可用。

如果我使用wget -O page http://page.com转储html,那么我可以看到文件中的数据。它类似于<a href="blah" data-mine="a;slfkjasd;fklajsdfl;ahsdf">blahlink</a>

我可以在编辑器中编辑data-mine部分,所以我知道它就在那里......似乎表现良好的解析器正在丢弃它。

如你所见,我很困惑。

3 个答案:

答案 0 :(得分:1)

是的,lxml由于某种原因没有公开属性名称,而Talvalin是对的,html5lib会这样做:

stav@maia:~$ python
Python 2.7.3 (default, Aug  1 2012, 05:14:39) [GCC 4.6.3] on linux2
>>> import html5lib
>>> html = '''<a href="blah" target="_blank" data-mine="a;slfkjasd;fklajsdfl;ahsdf"
... data-yours="truly">blahlink</a>'''
>>> for x in html5lib.parse(html, treebuilder='lxml').xpath('descendant::*/@*'):
...     print '%s = "%s"' % (x.attrname, x)
...
href = "blah"
target = "_blank"
data-mine = "a;slfkjasd;fklajsdfl;ahsdf"
data-yours = "truly"

答案 1 :(得分:1)

我没有使用第三方库就这样做了:

import re
data_email_pattern = re.compile(r'data-email="([^"]+)"')
match = data_email_pattern.search(response.body)
if match:
    print(match.group(1))
    ...

答案 2 :(得分:0)

我没有尝试过,但有html5lib(http://code.google.com/p/html5lib/)可以与Beautiful Soup一起使用,而不是scrapy的内置选择器。