我正在嘗試抓取網站以獲取電子郵件。我注意到有些電子郵件沒有被接收......我相信我的腳本只會接收超鏈接的電子郵件。
import requests
import re
from bs4 import BeautifulSoup
allLinks = [];mails=[]
url = 'https://sourceforge.net/projects/peruggia/'
response = requests.get(url)
soup=BeautifulSoup(response.text,'html.parser')
def findMails(soup):
for name in soup.find_all():
if(name is not None):
emailText=name.text
match=bool(re.match('[a-zA-Z0-9_. -] @[a-zA-Z0-9-] \.[a-zA-Z0-9-.] $',emailText))
if('@' in emailText and match==True):
emailText=emailText.replace(" ",'').replace('\r','')
emailText=emailText.replace('\n','').replace('\t','')
if(len(mails)==0)or(emailText not in mails):
print(emailText)
mails.append(emailText)
findMails(soup)
mails=set(mails)
if(len(mails)==0):
print("NO MAILS FOUND")
目標是“ https://sourceforge.net/projects/peruggia/”。掃描應顯示[email protected]。我很確定我需要編輯這一行:
for name in soup.find_all():
任何幫助,將不勝感激!
uj5u.com熱心網友回復:
這可以幫助你
您可以只關注用戶評論,而不是搜索整個網頁。
使用來自 beautifulsoup 物件的查找功能從網頁中獲取用戶評論。
從文本中使用正則運算式獲取電子郵件地址。
import requests
import re
from bs4 import BeautifulSoup
allLinks = [];mails=[]
url = 'https://sourceforge.net/projects/peruggia/'
response = requests.get(url)
soup=BeautifulSoup(response.text,'html.parser')
def findMails(soup):
mail_text = soup.find('div',{'class':'review-txt'}).text
match = re.search(r'[\w. -] @[\w-] \.[\w.-] ', mail_text)
mail = match.group(0)
if(len(mail)==0)or(mail not in mails):
print(mail)
mails.append(mail)
findMails(soup)
mails=set(mails)
if(len(mails)==0):
print("NO MAILS FOUND")
else:
print("Mails found")
輸出:
[email protected]
Mails found
uj5u.com熱心網友回復:
嘗試這個:
soup.find_all('div', {'class': "review-txt"})
這似乎縮小了范圍,如果這就是你要找的。我只在該頁面上看到一個電子郵件地址,在上面的div. 我不確定這是否適合您的目的,但這是一個開始。
請記住,您通常可以說find_all('tag', attrib='something'), 但它class是一個保留字,因此您必須使用字典格式。
我還注意到re.match(),即使捕獲的文本中有電子郵件地址,您也總是回傳 False。
uj5u.com熱心網友回復:
嘗試不同的正則運算式,這會簡單得多。我在這里的答案中找到了這個表達。
此外,由于您正在網站上的任何地方查找電子郵件,因此我只是findall在正文標簽中的所有內容上使用了該功能。
url = 'https://sourceforge.net/projects/peruggia/'
res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser')
def findMails(soup):
data = ''
for tag in soup('body'):
data = tag.text.strip()
return re.findall(
'[\w\.-] @[\w\.-] \.\w ', data)
emails = findMails(soup)
print(emails) if len(emails) > 0 else print('Emails Not found')
## Result: ['[email protected]']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/374971.html
上一篇:Python兩個變數for回圈
