1

Pythonからhtml要素のdata-*部分にアクセスすることは可能ですか?私はscrapyを使用していますが、生データは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

ええ、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 に答える
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 に答える
0

試したことはありませんが、scrapyの組み込みセレクターの代わりにBeautiful Soupと組み合わせて使用​​できるhtml5lib( http://code.google.com/p/html5lib/ )があります。

于 2013-02-15T07:24:13.480 に答える