【问题标题】:Try to parse phone number from html, but get a lot of empty rows尝试从 html 解析电话号码,但得到很多空行
【发布时间】:2019-06-29 10:21:45
【问题描述】:

我不明白如何通过正则表达式从 html 中获取电话号码。我检查了我的正则表达式here,它可以工作并且必须从这个link 获取号码

我尝试这样解析:

import requests
import re

url = 'https://a101.ru'
r = requests.get(url)
html = r.text
result = re.findall('((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}', html)
print(result)

And get this: 
[(u'', u'', u''), (u'', u'', u'').....(u'+7 ', u'+7', u'(495) ')....(u'', u'', u'')]

【问题讨论】:

标签: python regex python-2.7 beautifulsoup


【解决方案1】:

您可以使用正则表达式来发现 href 的 tel: 部分

import re
import requests

r = requests.get('https://a101.ru', verify=False)
print re.findall(r'tel:(.*?)">', r.text)

对于该页面,它将发现 4 个匹配项:

['+7(495)221-40-21', '+7(495)221-40-21', '+7(495)221-40-21', '+7(495)221-40-21']

通常我会使用 BeautifulSoup 来正确解析文件并提取信息,但是对于非常具体的次要用途,可以谨慎使用正则表达式。


您可以使用BeautifulSoup 获得相同的结果,如下所示:

from bs4 import BeautifulSoup
import requests
import re

r = requests.get('https://a101.ru', verify=False)
soup = BeautifulSoup(r.content, "html.parser")
print([tel['href'][4:] for tel in soup.find_all('a', href=re.compile(r'tel:'))])

【讨论】:

  • 我可以使用这个正则表达式 ('tel:(.*?)">') 来获取所有 html 的电话号码吗?
  • tel: 前缀是电话用来实际拨打号码的,并非所有网站都添加它。如果使用它,您可以相当肯定它是一个有效数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 2018-08-14
相关资源
最近更新 更多