是否可以从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
部分,所以我知道它就在那里......似乎表现良好的解析器正在丢弃它。
如你所见,我很困惑。
答案 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的内置选择器。