2017-07-28 13 views
1

私はいくつかの情報(この場合は電話番号)を取得するウェブスクレイパーを作ろうとしています。電話番号を取得するために、ここでは電話番号を検索するために、自己作成してテストした正規表現(RegExrを使用)を使用しています(国番号(米国では+1)、括弧など)。 )BeautifulSoup + HTML + Regex = ...何もありませんか?

regexPhone = re.compile("(\+?1[-.\s]?)?(([0-9]{3}|(\([0-9]{3}\)))[-.\s]?[0-9]{3}[-.\s]?[0-9]{4})|[0-9]{11}|[0-9]{10}|[0-9]{7}") 

私はスープのオブジェクトを持っており、そのようにそれを通過:

soup = BeautifulSoup(request.content, "html.parser") 
for num in soup.find_all(regexPhone) 
    print num 

をただし、HTMLページ内の電話番号があります私はを知っにもかかわらず、プログラムはしていませんそれを印刷する。これはなぜですか、それを修正するために何ができますか?

+1

バックスラッシュをエスケープするか、生の文字列を使用する必要があります。詳細については、[https://docs.python.org/3/library/re.html](https://docs.python.org/3/library/re.html)をご覧ください。 – Matthias

+0

bsについては忘れて、単にrequest.contentに対して実行してください(おそらくresponse.contentでなければなりません)。 – pguardiario

答えて

0

正規表現に生の文字列を追加し、soupからsoup.get_text()を使用してテキストのみを抽出しました。

regexPhone = re.compile(r"(\+?1[-.\s]?)?(([0-9]{3}|(\([0-9]{3}\)))[-.\s]?[0-9]{3}[-.\s]?[0-9]{4})|[0-9]{11}|[0-9]{10}|[0-9]{7}") 

soup = BeautifulSoup(request.content, "html.parser") 
text = soup.get_text(strip="True") 
results = regexPhone.search(text) 
print(results.groups()) 
+0

私はPython 2.xを使用しているので、regexPhone.findall(テキスト)にregexPhone.search(テキスト)を変更してそこから行っていましたが、感謝しています! – JPLim

関連する問題