代码之家  ›  专栏  ›  技术社区  ›  TJ1

python:从返回额外字符的网页中提取电子邮件地址

  •  0
  • TJ1  · 技术社区  · 7 年前

    Here 是包含电子邮件地址的示例网址。 下面是我使用的代码:

    from bs4 import BeautifulSoup
    import requests
    import re
    
    url = 'https://viterbi.usc.edu/directory/faculty/Zadeh/Ali-Enayat'
    page_response = requests.get(url, timeout=5)
    soup = BeautifulSoup(page_response.content, "html.parser")
    email = re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+", soup.text)
    print(email)
    

    我正等着它回来 azadeh@usc.edu 作为电子邮件地址,但它会返回 740-4694azadeh@usc.edu . 我做错了什么?如何解决这一问题,使电子邮件提取对任何网页都有效?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ajax1234    7 年前

    不需要使用 re 当全部能力 bs4 由您决定:

    from bs4 import BeautifulSoup as soup
    import requests
    d = soup(requests.get('https://viterbi.usc.edu/directory/faculty/Zadeh/Ali-Enayat').text, 'html.parser')
    email = d.find('div', {'class':'contactInformation'}).find_all('ul')[-2].find_all('li')[-1].text
    

    输出:

    'azadeh@usc.edu'
    

    编辑:一种更通用的方法是将正则表达式应用于 BS4 对象:

    re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+", str(d))
    

    输出:

    ['azadeh@usc.edu']