为了账号安全,请及时绑定邮箱和手机立即绑定

使用正则表达式识别来自美丽汤的电子邮件

使用正则表达式识别来自美丽汤的电子邮件

哔哔one 2022-09-27 15:18:33
我是一个初学者,正在开发一个可以从给定网站抓取电子邮件的程序。代码如下:import requests, bs4, reprint('Fetching Website...')res = requests.get('https://examplewebsite.com')res.raise_for_status()soup = bs4.BeautifulSoup(res.text, 'html.parser')type(soup)my_list = []for link in soup.find_all('a'):    my_list.append(link.get('href'))emailregex = re.compile(r'''(    [a-zA-Z0-9._%+-:]+    @    [a-zA-Z0-9.-]+    \.[a-zA-Z]{2,4}    )''', re.VERBOSE)newlist = list(filter(emailregex.search, my_list))print(newlist)print('---Done---')但是,当我运行代码时,我收到一个错误:“TypeError:预期的字符串或类似字节的对象”。我发现如果我这样做:newlist = list(filter(emailregex.search, str(my_list)))print(newlist)错误将消失,但我的“新列表”不包含任何结果。我已验证“my_list”确实返回了预期结果的列表。我发现,如果我打印“my_list”并将其内容粘贴到一个新文件中,在那里我将其添加到运行相同代码的列表中,它就可以正常工作,因此我不认为这是正则表达式的问题。我认为这可能是“my_list”中的数据类型?我真的没有任何好主意,所以任何帮助都将不胜感激。
查看完整描述

2 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

"TypeError: expected string or bytes-like object"是因为不仅包括字符串,而是要将变量转换为大字符串my_liststr(my_list)


print(str(my_list)) # this is a string

print(type(str(my_list)))  # output: str

您需要将 的每个项都更改为字符串,然后重试my_list


my_list = list(map(str, my_list))

newlist = list(filter(emailregex.search, my_list))


查看完整回答
反对 回复 2022-09-27
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

import requests

from bs4 import BeautifulSoup

import re



def main(url):

    r = requests.get(url)

    soup = BeautifulSoup(r.content, 'html.parser')

    target = "".join([item.get("href")

                      for item in soup.findAll("a", href=True)])

    matches = re.findall(

        r'''[a-zA-Z0-9._%+-:]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}''', re.VERBOSE, target)

    for match in matches:

        print(match)



main("https://www.example.com")


查看完整回答
反对 回复 2022-09-27
  • 2 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号