2017-07-28 64 views
1

我試圖讓一個webscraper獲取一些信息(在這種情況下是一個電話號碼)。爲了獲得電話號碼,我使用了自行創建並經過測試的正則表達式(使用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.get_text()僅提取soup中的文本。

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.search(文本)regexPhone.findall(文本),並從那裏去,但謝謝! – JPLim