上篇笔记我记录了scrapy的环境搭建和项目创建和第一次demo测试。本篇我们来结合现实场景利用scrapy给我们带来便利。
有炒股或者其它理财产品的朋友经常会关心每日的个股走势,如果结合爬虫进行实时通知自己,并根据自己预想的行情进行邮件通知(比如某个股票如果到达100块钱就发邮件通知自己),这样会大大提高我们的炒股收益。
def start_requests(self):
urls = [
"http://q.10jqka.com.cn/"
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
# 股票代码列表
stock_id_list = response.css("div#maincont table.m-table.m-pager-table td:nth-child(2) a::text").extract()
# 股票名称列表
stock_name_list = response.css("div#maincont table.m-table.m-pager-table td:nth-child(3) a::text").extract()
# 股票价格列表
price_list = response.css("div#maincont table.m-table.m-pager-table td:nth-child(4)::text").extract()
# 股票涨跌列表
speed_up_list = response.css("div#maincont table.m-table.m-pager-table td:nth-child(6)::text").extract()
for i in range(len(stock_id_list)):
stock_id = stock_id_list[i]
stock_name = stock_name_list[i]
price = price_list[i]
speed_up = speed_up_list[i]
# 存到item,用来持久化
item = ScrapyDemoItem()
item["stock_id"] = stock_id
item["stock_name"] = stock_name
item["price"] = price
item["speed_up"] = speed_up
yield item
def __init__(self):
self.html = '<html><head><meta charset="utf-8"></head><body><table>'
def process_item(self, item, spider):
self.html = self.html + '<tr>'
self.html = self.html + '<td>%s</td>' % item["stock_id"]
self.html = self.html + '<td>%s</td>' % item["stock_name"]
self.html = self.html + '<td>%s</td>' % item["price"]
self.html = self.html + '<td>%s</td>' % item["speed_up"]
self.html = self.html + '</tr>'
return item
def close_spider(self, spider):
self.html = self.html + '</table></body></html>'
self.send_email(self.html)
print()
def send_email(self, html):
# 设置邮箱账号
account = "xxx@qq.com"
# 设置邮箱授权码
token = "xxx"
# 实例化smtp对象,设置邮箱服务器,端口
smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
# 登录qq邮箱
smtp.login(account, token)
# 添加正文,创建简单邮件对象
email_content = MIMEText(html, 'html', 'utf-8')
# 设置发送者信息
email_content['From'] = 'xxx@qq.com'
# 设置接受者信息
email_content['To'] = '技术总是日积月累的'
# 设置邮件标题
email_content['Subject'] = '来自code_space的一封信'
# 发送邮件
smtp.sendmail(account, 'xxx@qq.com', email_content.as_string())
# 关闭邮箱服务
smtp.quit()
Scrapy是个很好用的框架,结合日常生活中的需求,我们可以写很多给我们带来便利的工具,以后会补上各种我多年来使用过的工具代码,都是基于Scrapy的使用。