python
  • python-2.7
  • beautifulsoup
  • 2016-07-12 13 views 1 likes 
    1

    文字列から二重引用符で囲んだデータを抽出する必要があります。二重引用符でデータを効率的に抽出する

    入力:

    <a href="Networking-denial-of-service.aspx">Next Page →</a> 
    

    出力:現在

    Networking-denial-of-service.aspx 
    

    、私はこれを行うには、次の方法を使用していますが、それは罰金を実行されています。

    atag = '<a href="Networking-denial-of-service.aspx">Next Page →</a>' 
    start = 0 
    end = 0 
    
    for i in range(len(atag)): 
        if atag[i] == '"' and start==0: 
         start = i 
        elif atag[i] == '"' and end==0: 
         end = i 
    
    nxtlink = atag[start+1:end] 
    

    私の質問は、このタスクを実行する他の効率的な方法があるということです。

    ありがとうございます。

    +3

    を/regex.html)はもちろんですが、HTMLのためにそれらを使用することは強く推奨されています(http://stackoverflow.com/questions/590747/using-regular-expressions-to-parse-html-why-not)多くのケースを逃すことができます。 "正しい"方法は、[HTMLParser](https://docs.python.org/2/library/htmlparser.html)(またはその上にあるもの)を使用してHTMLを解析し、必要なノードを見つけてその属性を読んでください。 – CherryDT

    +0

    @CherryDTサンプルコードなどを提供してください。 – dazzieta

    +0

    私は実際にはPythonではないので、例を提供することは自信がありません。だからこれはコメントであり、答えではない。しかし、私が言ったことは(regexesがありますが、HTMLパーサーが好まれます)、他の言語にも当てはまります。 – CherryDT

    答えて

    2

    あなたは正規表現をしたい理由を、私は見ていないので、あなたはすべてのアンカーからのhrefをしたいならば、あなただけのhref属性を持つアンカータグわかります'a[href]'選択し、CSSを使用することができ、このbeautifulsoupをタグ付け:

    h = '''<a href="Networking-denial-of-service.aspx">Next Page →</a>''' 
    
    soup = BeautifulSoup(h) 
    
    print(soup.select_one('a[href]')["href"]) 
    

    それとも見つける:

    print(soup.find('a', href=True)["href"]) 
    

    お持ちの場合は、複数:

    for a in soup.select_one('a[href]'): 
        print a["href"] 
    

    または:

    for a in soup.find_all("a", href=True): 
        print a["href"] 
    

    また、あなたは「大手ているのhrefたいことを指定することができます。https://docs.python.org/2/howto([正規表現]があります

    soup.select_one('a[href^="]') 
    
    +0

    答えをありがとう。 – dazzieta

    0

    私は2つの二重引用符でデータを取得する方法を正確に書いています。私は、HTMLParserがより良いかもしれないというコメントに同意します...

    正規表現を使うと、特に複数のものを探したい場合に役立ちます。あなたは二重引用符の奇数を持っている場合たとえば、これはコード

    import re 
    string_with_quotes = 'Some "text" "with inverted commas"\n "some text \n with a line break"' 
    
    Find_double_quotes = re.compile('"([^"]*)"', re.DOTALL|re.MULTILINE|re.IGNORECASE) # Ignore case not needed here, but can be useful. 
    
    list_of_quotes = Find_double_quotes.findall(string_with_quotes) 
    
    list_of_quotes 
    
    ['text', 'with inverted commas', 'some text \n with a line break'] 
    

    の可能なセットで、最後の二重引用符は無視されます。見つからなければ、空のリストが生成されます。

    様々な参照

    http://www.regular-expressions.info/正規表現

    Regex - Does not contain certain Charactersを学ぶための本当に良いです文字

    https://docs.python.org/2/library/re.html#re.MULTILINEをしない方法を私に与えたre.MULTILINEとre.DOTALL(下)は何をすべきかを説明します。

    +0

    コードやリンクを提供してくれて本当にうれしいです。 – dazzieta

     関連する問題

    • 関連する問題はありません^_^