News Collector

在工作过程中经常需要关注几个政府网站的通知,随时关注项目信息的更新。否则错过了最新的通知可能会错过申报的机会。

每天需要关注的网站是固定的几个,更新的频率不是很高,每天点开一到两次就可以,所以决定写一段代码免去每天点开几个网页的麻烦,也避免忘记看错过重要信息。

用到了selenium + chrome + Chromedriver,环境是好久之前配置好的就不写了,过程比较简单。首先Webdriver启动Chrome浏览器

1
2
3
def __init__(self):
self.dr = webdriver.Chrome()
self.dr.get('http://www.ndrc.gov.cn/zwfwzx/tztg/')

分析网页结构,确定目标元素的xpath

1
titlepath = "//*[@id='out-content']/div[2]/div[4]/div[2]/div/ul[2]/li[" + str(i) + "]/a"

再提取需要的信息

1
2
curr_title = self.dr.find_element_by_xpath(titlepath)
curr_url = self.dr.find_element_by_xpath(titlepath).get_attribute("href")

退出浏览器
1
self.quit()

将信息进行简单的整理,最后将收集到的信息整理好发送到邮箱
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
if len(TitleToday):   
smtpserver = 'smtp.163.com' ## 以163邮箱为例
username = 'sender@example.com'
password='XXXXXXX'
sender='sender@example.com'
receiver='receiver@example.com'
subject = '每日通知更新'
subject=Header(subject, 'utf-8').encode()
msg = MIMEMultipart('mixed')
msg['Subject'] = subject
msg['From'] = 'Name<sender@example.com>'
msg['To'] = 'receiver@example.com'
msg['Date'] = Date
text = "今日更新通知:\n"
for i in range (0,len(TitleToday)):
text = text + TitleToday[i] + " (" + UrlToday[i] + ")\n"
text_plain = MIMEText(text,'plain', 'utf-8')
msg.attach(text_plain)
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
print('Mail has been sent!')
else:
print('There is no new news today.')

完整代码下载链接
开始时用pyinstaller 将python脚本打包成EXE文件放到桌面,每天到办公室开电脑后点击一下,但这样还需要再点,所以我用Windows的“任务计划程序”设置成每天定时自动执行脚本,但是这样如果没在办公室没开电脑就不能执行,所以最后还是放到vps上,使用crontab -e 命令设成每天定时执行脚本,这样每天如果有新的通知会发送到邮箱,终于从每天手动查消息中解放了出来。

Share