吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3149|回复: 3
收起左侧

[会员申请] 申请ID:刘福帅【申请通过】

[复制链接]
吾爱游客  发表于 2015-9-28 19:18
1、申请ID:刘福帅
2、个人邮箱:1051295114@qq.com
3、原创技术文章:[size=1.6]python 用BeautifulSoup爬取kindle今日特价书
原文在我的个人技术博客:http://www.liufushuai.com/?p=163

以下为原文


序言

原谅我才疏学浅,发现Beautiful Soup这个库的时候确实被惊艳到了。Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。

install什么的,看这里 -> http://www.crummy.com/software/BeautifulSoup/

应用

既然这么好用,当然就要做点东西来玩了。做点什么好呢?之前一直每天登陆亚马逊网站查看今天的Kindle特价书,甚是麻烦。何不写一个脚本,每天定点登陆特价书页面,然后把爬取到的内容邮件发给我呢?恩,此想法甚好,马上开工。

0、获取Kindle特价书页面

def get_page():
return requests.get("http://t.cn/Rvm4xgc").text

1、初始化Beautiful Soup

soup = BeautifulSoup(html) # html为html源代码字符串,type(html) == str

到这里,先不急着写下去。先观察一下待抓取页面的源代码,定位到两本特价书处

可以发现,这两本特价书的书名、图片、链接、价格都包含在了几个HTML结构里面。所以,就要用到Beautiful Soup结构化数据的方法:

[Python] 纯文本查看 复制代码
soup.title
# <title>The Dormouse's story</title> 
soup.title.name
# u'title' 
soup.title.string
# u'The Dormouse's story' 
soup.title.parent.name
# u'head'
soup.p
# <p><b>The Dormouse's story</b></p> 
soup.p['class']
# u'title'
soup.a
# <a  id="link1">Elsie</a>
soup.find_all('a')
# [<a  id="link1">Elsie</a>,
#  <a  id="link2">Lacie</a>,
#  <a  id="link3">Tillie</a>]
soup.find(id="link3")
# <a  id="link3">Tillie</a>

2、获取书名、图片、链接、价格

[Python] 纯文本查看 复制代码
table = soup.body.find_all("table")[6]
name = table.find_all("tr")[1]

result["name"].append(name.find_all("td")[0].b.string)
result["name"].append(name.find_all("td")[2].b.string)

desc = table.find_all("tr")[2]

book_1 = desc.find_all("td")[0]
result["cover"].append(book_1.a.img["src"])
result["link"].append("[url=http://www.amazon.cn]http://www.amazon.cn[/url]" + book_1.a["href"])
result["desc"].append(book_1.contents[1])
result["price"].append(book_1.find_all("p")[1].b.span.string)

book_2 = desc.find_all("td")[2]
result["cover"].append(book_2.a.img["src"])
result["link"].append("[url=http://www.amazon.cn]http://www.amazon.cn[/url]" + book_2.a["href"])
result["desc"].append(book_2.contents[1])
result["price"].append(book_2.find_all("p")[1].b.span.string)

代码很简单,对照文档很容易理解就不做解释了。OK,到这里特价书信息就抓取完毕,接下来就是收获的季节了,发送到自己的邮箱,这样就可以很方便的随时查看特价书信息了。发送邮件用到了  smtplib  这个模块,请看介绍。

3、发送邮件

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
smtp协议的基本命令包括:
    HELO 向服务器标识用户身份
    MAIL 初始化邮件传输 mail from:
    RCPT 标识单个的邮件接收人;常在MAIL命令后面,可有多个rcpt to:
    DATA 在单个或多个RCPT命令后,表示所有的邮件接收人已标识,并初始化数据传输,以.结束
    VRFY 用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令
    EXPN 验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
    HELP 查询服务器支持什么命令
    NOOP 无操作,服务器应响应OK
    QUIT 结束会话
    RSET 重置会话,当前传输被取消
    MAIL FROM 指定发送者地址
    RCPT TO 指明的接收者地址

一般smtp会话有两种方式,一种是邮件直接投递,就是说,比如你要发邮件給zzz@163.com,那就直接连接163.com的邮件服务器,把信投給zzz@163.com; 另一种是验证过后的发信,它的过程是,比如你要发邮件給zzz@163.com,你不是直接投到163.com,而是通过自己在sina.com的另一个邮箱来发。这样就要先连接sina.com的smtp服务器,然后认证,之后在把要发到163.com的信件投到sina.com上,sina.com会帮你把信投递到163.com。

由于第一种会话方式需要邮件接收者必须在这个服务器上存在,而且很有可能被当做垃圾邮件拒收,所以这里我们选择第二种会话方式。请看代码

[Python] 纯文本查看 复制代码
mail_config = {
    "from": "YOUR USER [url=mailto:NAME@163.com]NAME@163.com[/url]",
    "to": "YOUR USER [url=mailto:NAME@sina.com]NAME@sina.com[/url]",
    "server": "smtp.163.com",
    "username": "YOUR USER NAME",
    "pwd": "YOUR PASS WORD"
}
 
def send_mail(sbj, content, from_whom=mail_config['from'], to_whom=mail_config['to'], server=mail_config['server'],
              username=mail_config['username'], pwd=mail_config['pwd']):
    msg = MIMEText(content, "html", "utf-8")
    msg['Subject'] = Header(sbj, "utf-8")
    msg['From'] = from_whom
    msg['To'] = to_whom
    s = smtplib.SMTP(server)
    s.ehlo()
    s.starttls()
    s.login(username, pwd)
    s.sendmail(from_whom, to_whom, msg.as_string())

在本地编译器上调试通过,会看到自己的送信邮箱的已发邮件列表里面有一封发送成功的邮件,而收信邮箱已经收到了今天的特价书信息,真是皆大欢喜,怕手称快。

欣喜之余,可回过头来想一下,这样的一个脚本是必须要有运行环境的,爬取特价书是需要联网的。本来是要解决每天打开浏览器的麻烦,现在似乎更加繁琐了,还要打开电脑,运行脚本。有这个的时间早背十几个单词了,还不如直接自己看呢!理想的情况是,每天早晨醒来,特价书信息已经躺在邮箱里面,只需我睁开眼睛瞄一下就可以知道今天有哪些好书了。有没有解决的办法呢?答案是,有!请看下一篇   将python脚本部署到SAE并定时执行Cron作业

登录截图.JPG

这个是博客后台登录截图


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2015-10-10 18:35
ID:刘福帅
邮箱:1051295114@qq.com

申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。
刘福帅 发表于 2015-10-12 10:07 来自手机
Hmily 发表于 2015-10-10 18:35
ID:刘福帅
邮箱:


新人刘福帅前来报到
刘福帅 发表于 2015-10-12 10:10 来自手机
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-14 10:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表