1

このようなリンク があります 、標準の英語キーボードには存在しない<a href=abc.asp?xyz=foobar&baz=lookatme´_beautiful.jpg>この珍しい記号があります。このエディタ´で生成するのはシンボルの鏡面反射です。Ctrl+kしたがって、stackoverflow で見つかったこのコードを実行した後:

soup = BeautifulSoup.BeautifulSoup("<a href=abc.asp?xyz=foobar&baz=lookatme´_beautiful.jpg>");
for a in soup.findAll('a'):                                                                       
    print a['href']

出力はですabc.asp?xyz=foobar&baz=lookatmeが、私はしたいですabc.asp?xyz=foobar&baz=lookatme´_beautiful.jpg。私がスクレイピングしているウェブサイトは.brドメインにあります。リンクは英語ですが、一部の記述はポルトガル語ですが、その珍しい記号は有効な英語の記号ではない可能性があります。ご意見やご提案はありますか?

編集:Python文字列が私を生成した表現を見ましたが、それは<a href=abc.asp?xyz=foobar&baz=lookatme\xb4_beautiful.jpg>

1 つの方法は、カスタム regex を生成することです。このスニペットも stackoverflow からのものです。

import re
urls = re.findall(r'href=[\'"]?([^\'" >]+)', s)

beautifulsoup regex を変更できない場合、上記の正規表現を変更して\xb4シンボルを組み込むにはどうすればよいですか。(問題の文字列はここにあります)

4

3 に答える 3

0

href=正規表現は、スペースで終わる (または引用符で囲まれている) 限り、次の内容を気にしないため、他の文字と同様に \xb4 に一致します。

>>> s = "<a href=abc.asp?xyz=foobar&baz=lookatme\xb4_beautiful.jpg>"
>>> print s.decode("latin-1")
<a href=abc.asp?xyz=foobar&baz=lookatme´_beautiful.jpg>
>>> urls = re.findall(r'href=[\'"]?([^\'" >]+)', s)
>>> urls
['abc.asp?xyz=foobar&baz=lookatme\xb4_beautiful.jpg']

(ところで、\xb4 は鋭いアクセントです)

于 2013-07-23T23:58:28.173 に答える
0

[\u0000-\uFFFF]を re パターンの部分範囲として含めるか、\xb4 のみを[\u00b4]として含めることができます。

于 2013-07-23T23:25:00.107 に答える
0

BeautifulSoup の最新バージョンにアップグレードしてインストールhtml5libします。これは非常に寛大なパーサーです。

import requests
from bs4 import BeautifulSoup

html = requests.get('http://www.atlasdermatologico.com.br/listar.asp?acao=indice').text
soup = BeautifulSoup(html, 'html5lib')

for a in soup.find_all('a'):
    href = a.get('href')

    if '\\' in repr(href):
        print(repr(href))

URL に含まれるリンクを正しく出力し\xb4ます。

于 2013-07-23T23:55:52.547 に答える