我对编程很陌生,所以如果我的问题太琐碎,我就会道歉。 我最近参加了一些Udacity课程,比如"计算机科学简介","使用Python编程基础"和其他一些人。
前几天,我的老板让我从某些网站收集一些电子邮件地址。他们中的一些人在同一页面上有很多地址,所以铃声响了,我想创建自己的代码来完成收集电子邮件并将其粘贴到电子表格中的重复性任务。
因此,在回顾了这些corses的一些课程以及youtube上的一些视频后,我想出了这段代码。
注意:它是用Python 2.7.12编写的,我使用的是Ubuntu 16.04。
import xlwt
from bs4 import BeautifulSoup
import urllib2
def emails_page2excel(url):
# Create html file from a given url
sauce = urllib2.urlopen(url).read()
soup = BeautifulSoup(sauce,'lxml')
# Create the spreadsheet book and a page in it
wb = xlwt.Workbook()
sheet1 = wb.add_sheet('Contacts')
# Find the emails and write them in the spreadsheet table
count = 0
for url in soup.find_all('a'):
link = url.get('href')
if link.find('mailto')!=-1:
start_email = link.find('mailto')+len('mailto:')
email = link[start_email:]
sheet1.write(count,0,email)
count += 1
wb.save('This is an example.xls')
代码运行良好且速度非常快。但是,我想通过以下方式改进它:
我希望我能清楚表达自己。 提前谢谢,
安寝
答案 0 :(得分:0)
就BeautifulSoup
而言,您可以通过以下三种方式在a
中搜索电子邮件:
1)使用find_all
与lambda
一起搜索a
且href
作为属性的所有代码,其值为mailto
。< / p>
for email in soup.find_all(lambda tag: tag.name == "a" and "href" in tag.attrs and "mailto:" in tag.attrs["href"]):
print (email["href"][7:])
2)使用find_all
与regex
一起在mailto:
代码中查找a
。
for email in soup.find_all("a", href=re.compile("mailto:")):
print (email["href"][7:])
3)使用select
查找a
标记,其href
属性以mailto:
开头。
for email in soup.select('a[href^=mailto]'):
print (email["href"][7:])
这是我个人的偏好,但我更喜欢使用requests而不是urllib
。更简单,更好的错误处理和线程安全。
就您的其他问题而言,您可以创建一个方法来获取,解析和返回所需的结果,并将url作为参数传递。您只需要循环您的网址列表并调用该方法。
对于你的老板问题,你应该使用GUI。
玩得开心。