2

XMLを使用してヤフーファイナンスから「セクター」および「産業」フィールドをスクレイピングしようとしています。

href の URL は一貫してhttp://biz.yahoo.com/ic/ xyz .html であることに気付きました。xyzは数字です。

1 桁以上のワイルドカードを含める方法を教えてください。Google およびスタック検索に基づいていくつかの方法を試しましたが、何も機能しませんでした。

import lxml.html
url = 'http://finance.yahoo.com/q?s=AAPL'
root = lxml.html.parse(url).getroot()
for a in root.xpath('//a[@href="http://biz.yahoo.com/ic/' + 3 digit integer wildcard "     +'.html"]')
    print a.text
4

2 に答える 2

1
root.xpath(r'''//a[re:match(@href, "http://biz\.yahoo\.com/ic/[0-9]{1,3}\.html")]''',
           namespaces={'re': 'http://exslt.org/regular-expressions'})

XPath式aは、正規表現が一致するすべてのタグに一致します。属性が。で始まり、1〜3桁()で続き、。で終わるre:match場合はtrueを返します。hrefhttp://biz.yahoo.com/ic/[0-9]{1,3}.html

どの文字とも一致する\.ので使用しましたが、その前に円記号を付けると、無地のドットのように扱われます。.

r'''...'''文字列が生であり(Pythonは文字列をまったく解釈しない、たとえば気にしない) 、区切り文字がであるため、文字列\を含めることもできることを意味します。''''

クレジットはStackOverflowからの別の回答に送られます。

于 2012-04-28T05:01:48.587 に答える