3

html ブロッ​​クで検索したいすべての要素を検索し、それを並べ替えて、すべてのタグがリスト内に配置されるようにしたい ex: ('h3', 'a', 'img')

私の問題をより美しく、より簡単に拡張する(タグを追加する)方法で問題を解決するためのより良い方法があるかどうか疑問に思います。

例: したがって、このリストをよく考えずに関数に送信できます。

スニペットを実行した後の結果は次のとおりです。

[
('text 1', '/url1', '/img1.png'),
('text 2', '/url2', '/img3.png'),
('text 3', '/url3', '/img3.png'),
]

スニペット:

def parse_element_tag(el):
    #<class 'lxml.html.HtmlElement'>
    dict = {'a': (el.get('href'), 1), 'img': (el.get('src'), 2), 'h3': (el.text, 0)}
    return dict[el.tag]

requests_cache.configure('test', expire_after=900)
r = readUrl('http://www.svtplay.se/program')
l = lxml.html.fromstring(r.text)
lst = []
for el in l.cssselect('div ul.svtGridBlock li div a'):
    #lst.append(sorted([parse_element_tag(i) for i in el.iter()], key=lambda val: val[1]))
    lst.append(
               tuple([i[0] for i in sorted(
                      [parse_element_tag(i) for i in el.iter() if i.tag in ('a', 'img', 'h3')], key=lambda val: val[1]
                      )]
               ))
4

1 に答える 1