0

特定の Web サイトのすべての ID の値を表示する必要があります。urllibまたはurllib2、サイトを読み取ってから「id =」の後に値だけを出力できる関数はありますか? これについての助けは大歓迎です。

4

3 に答える 3

2

BeautifulSoup と requests を使用してこれを行います。このページを使用して簡単な例をまとめ、 Githubに投稿しました。

ここでの実際の作業は return ステートメントにあることに注意してください。このほとんどはボイラープレートです。

from bs4 import BeautifulSoup as BS
import requests as r

def get_ids_from_page(page):
    response = r.get(page)
    soup = BS(response.content).body

    return sorted([x.get('id') for x in soup.find_all() if x.get('id') is not None])

if __name__ == '__main__':
    # In response to the question at the URL below - in short "How do I get the
    #   ids from all objects on a page in Python?"
    ids = get_ids_from_page('http://stackoverflow.com/questions/14347086/')

    for val in ids:
        print val
于 2013-01-15T22:00:26.753 に答える
0

urllibまたはurllib2を使用してページを取得する、またはより便利なrequests ライブラリを使用してから正規表現を適用する、明白な (しかし醜い)正規表現ソリューションがありますが、 pyqueryパッケージをお勧めします。これはjqueryに似ていますが、python の場合、css セレクターを使用してノードを取得します。

あなたの問題のために:

from pyquery import PyQuery

page = """
<html>
  <body id='test'>
    <p id='test2'>some text</p>
  </body>
</html>
"""

doc = PyQuery(page)
for node in doc("*[id]").items():
    print(node.attr.id)

生成されます:

test
test2

そして、ページをダウンロードするには:

import requests
page = requests.get("http://www.google.fr").text

また、またはを使用して url を開くことpyqueryもできます。urllibrequests

于 2013-01-15T21:51:42.403 に答える
0

正規表現を使用できます:

import re

id_list = re.findall('id="(.*?)"', html_text)

またはもう少し複雑です (HTML タグからのみ解析していることを確認するため):

id_list = re.findall('<[^>]*? id="(.*?)"', html_text)

このようにして、特定のタイプの ID のみを解析するのは簡単です (いくつかの特別なパターンに一致します)。

于 2013-01-15T22:32:35.393 に答える