1

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

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

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

如您所见,我很困惑。

4

3 回答 3

1

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

import re
data_email_pattern = re.compile(r'data-email="([^"]+)"')
match = data_email_pattern.search(response.body)
if match:
    print(match.group(1))
    ...
于 2013-02-16T00:40:15.810 回答
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"
于 2013-02-15T19:24:11.473 回答
0

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

于 2013-02-15T07:24:13.480 回答