every blog every motto: Therefore ,send not to know for whom the bell tolls, It tolls for thee.
前言:
每天一个睡前小故事,给心爱的她(他)发一封啦啦啦
库: requests、smtplib、bs4等
环境: python3.7、ubuntu16.04
所需知识: python基础语法、requests。
状态: 本博文还在完善中……

一、代码部分

0.主程序

def main():for i in range(1, 11):  # 爬取页数范围if i == 1:url = 'http://www.tom61.com/ertongwenxue/shuiqiangushi/index.html'else:url = 'http://www.tom61.com/ertongwenxue/shuiqiangushi/index_{}.html'.format(i)print('正在爬取第{}页的故事'.format(i))# 提取一个网页htmlhtml = get_html(url)# 获取一页网页中所有故事的名称及链接get_all_story_link(html)time.sleep(0.15)# 所有链接爬去完成,打个包package_name_link = packaging(name_list, url_list)print('--->>>>>>>>爬取完成啦---------发邮件咯------------')random_choice_name_link = random.choice(package_name_link)  # 随机选择故事链接name_random_choice = random_choice_name_link[0]url_random_choice = random_choice_name_link[1]print('发送的故事名和链接:')print(name_random_choice)print(url_random_choice)# 发送故事send_story_to_email(name_random_choice, url_random_choice)

1.获取原网页html

def get_html(url):''' 获取原网页链接'''try:res = requests.get(url, headers=headers, timeout=30)res.raise_for_status()  # 如果状态不是200,引发HTTPerror异常# t1 = res.encoding  # 从HTTP header中猜测响应内容编码方式# t2 = res.apparent_encoding # 从内容分析出响应编码方式res.encoding = res.apparent_encoding  # 根据网页内容分析出编码方式# res.encoding='utf-8'  # 转码# print(t1,t2)return res.textexcept:return '产生异常'

2. 获取所有故事的名字和其链接

def get_all_story_link(html):'''获取每页中故事的名称及链接,存在列表中'''url_based = 'http://www.tom61.com/'soup = BeautifulSoup(html, 'lxml')html_part = soup.find(class_='txt_box')  # 获取一页中故事的标签# print(html_part)a_tag = html_part.find_all(name='a')  # 获取所有故事链接标签,存在列表中# print('-'*100)# print(a_tag)# 循环遍历存储链接和故事名for temp in a_tag:url_list.append(url_based + temp.get('href'))  # 提取每个故事的链接,追加到列表中name_list.append(temp.get('title'))  # 提取每个故事的名称,追加到列表中

3. 打包成[(story_name,story_link),…]

def packaging(story_name, story_url):'''打包'''package_name_link = list(zip(story_name, story_url))print('查看打包')print(package_name_link)return package_name_link

4. 发送故事到指定邮箱

def send_story_to_email(story_name, url):'''发送故事到指定邮件'''msg_from = '1301016428@qq.com'  # 发送方邮箱passwd = '   '  # 填送发送方邮箱授权码,此处可百度获得发送方邮箱授权码receivers = ['2904389420@qq.com']  # 收件人邮箱subject = '今日份的睡前故事--->>>{}'.format(story_name)  # 主题# 获得故事原网页html_story = get_html(url)# 提取故事的文字内容content = get_story_content(html_story)# 以下为发送msg = MIMEText(content)  # 发送内容msg['Subject'] = subject  # 主题msg['From'] = msg_from  # 发送方msg['To'] = ','.join(receivers)try:s = smtplib.SMTP_SSL('smtp.qq.com', 465)  # 邮件服务器及端口号s.login(msg_from, passwd)s.sendmail(msg_from, msg['To'].split(','), msg.as_string())print('邮件发送成功')except:print('发送失败')finally:s.quit()

5.成果

二、文字部分

1. 通过本篇你将掌握

  1. 针对不同网址的请求
        if i == 1:url = 'http://www.tom61.com/ertongwenxue/shuiqiangushi/index.html'else:url = 'http://www.tom61.com/ertongwenxue/shuiqiangushi/index_{}.html'.format(i)
  1. 抛出异常(判断状态码是否为200)
        res.raise_for_status()  # 如果状态不是200,引发HTTPerror异常
  1. 两种转码方式
  • 从HTTP header中猜测响应内容编码方式
        # t1 = res.encoding  # 从HTTP header中猜测响应内容编码方式
  • 从内容分析响应编码方式
        # t2 = res.apparent_encoding # 从内容分析出响应编码方式
  1. join的使用,将序列分开
    content = '\n'.join(text)  # 每段分开

2. 结束语

  1. contact by email: gaofeng.anhui@gamil.com
  2. 源码:https://github.com/onceone/Spiders

参考文章

[1] https://blog.csdn.net/weixin_44193909/article/details/88959522#commentBox
[2] https://www.jianshu.com/p/d78982126318
[3]https://www.cnblogs.com/yd1227/archive/2011/03/18/1988015.html
[4] https://docs.python.org/3.4/library/email-examples.html
[5] https://stackoverflow.com/questions/10851906/python-3-unboundlocalerror-local-variable-referenced-before-assignment

python爬虫之------每天给她(他)一个小故事啦啦啦啦相关推荐

  1. python爬虫学习(8) —— 关于4399的一个小Demo

    堂弟喜欢各种游戏,在没有网络的情况下,上4399显得很无力. 另外,4399广告好多,,而且加载慢.. 怎么办,,写个爬虫吧,,把4399上的"好玩"游戏爬下来. 1. 分析阶段 ...

  2. python爬虫入门教程(二):开始一个简单的爬虫

    2019/10/28更新 使用Python3,而不再是Python2 转载请注明出处:https://blog.csdn.net/aaronjny/article/details/77945329 爬 ...

  3. Python爬虫系列之爬取某奢侈品小程序店铺商品数据

    Python爬虫系列之爬取某奢侈品小程序店铺商品数据 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发> 点击这里联系我们 < 微信请扫描下方二维码 代码仅供学 ...

  4. 一个小故事讲明白进程、线程、Kotlin 协程到底啥关系?

    前言 协程系列文章: 一个小故事讲明白进程.线程.Kotlin 协程到底啥关系? 少年,你可知 Kotlin 协程最初的样子? 讲真,Kotlin 协程的挂起/恢复没那么神秘(故事篇) 讲真,Kotl ...

  5. 如何查询一个表中除某几个字段外其他所有的字段_一个小故事告诉你:如何写好数据分析报告?...

    关注并将「人人都是产品经理」设为星标 每天早 07 : 45 按时送达 给你一份数据,你能完美的出一份数据报告吗?本文结合一个小故事,来告诉大家如何写好一份数据分析报告,enjoy~ 作者:Haby ...

  6. 论团队协作的一个小故事

    前言 因负责的工作需要复盘,工作期间出现了不少问题.为了团结同事.不破坏友好的气氛,还必须指出团队的内部问题,作为一个普通员工的我,也只能编写一个幼稚的故事来说明一些团队内部的问题. 论团队协作的一个 ...

  7. 跟涛哥一起学嵌入式 27:一个小故事,让你明白进程、线程和协程的区别

    进程.线程和协程,是多任务编程中的常用术语.很多初学者分不清它们之间的区别,今天就以一个小故事为引子,让大家搞清楚他们之间的本质区别. 话说在西凉女儿国,大唐文化传播有限公司CEO唐僧招聘了三个员工做 ...

  8. Python爬虫,利用scrapy来编写一个爬虫

    本文将介绍我是如何在python爬虫里面一步一步踩坑,然后慢慢走出来的,期间碰到的所有问题我都会详细说明,让大家以后碰到这些问题时能够快速确定问题的来源,后面的代码只是贴出了核心代码,更详细的代码暂时 ...

  9. python爬虫翻页_教给你一个python爬虫最简单的翻页的办法

    很多同学对python爬虫翻页感到很是头疼,下面我教给大家一个最简单的办法:模糊搜索法.以这个网站 :https://m.51xw.net/meizi/ 为例 打开网站我们先看到的是一个个的图集,点开 ...

  10. python爬虫工程师考试科目一_一个Python爬虫工程师的修养

    练武不练功,到老一场空 练武的人都知道:练武不练功,到老一场空! 说的是只练花架子,不练习内功,最终也都是一个菜鸟级武师. 学习编程何尝不是!我时常见到已经学习相当一段时间的程序员,连稍微深点的基本知 ...

最新文章

  1. tensorflow入门(二)
  2. ffmpeg 播放器原理
  3. Linux使用ffmpeg合并视频
  4. oracle怎么优化动态sql语句,oracle动态sql语句处理
  5. ELK 源码详细安装步骤
  6. document.referer的使用
  7. 从零手动实现简易Tomcat
  8. PyTorch学习—2.张量的创建与张量的操作
  9. CentOS 6.5设置静态IP教程 并且可以ping通
  10. matlab cat函数_MATLAB的Categorical数组
  11. 恭祝大家2019新年吉祥顺利!
  12. Modbus通讯协议学习 - 认识篇
  13. ITIL 4 Foundation题目-4
  14. 基于echarts的数据可视化模板[开箱即用]
  15. C#微信开发---用户关注微信号后公众号发送欢迎关注
  16. python字典统计排序1_数据分析1_入门Python
  17. 用Word转换向导批量转换Word文档(转)
  18. win7系统问题:——桌面壁纸变黑解决方案
  19. OPPO A96和oppo Reno 7 哪个好
  20. WKWebView白屏问题

热门文章

  1. 地壳中元素含量排名记忆口诀_碳元素的知识点总结
  2. centos redis php扩展,手动在centos下安装redis及php扩展
  3. java语言 跨平台_Java语言不一定就跨平台
  4. 酷狗音乐linux版_酷狗音乐PC版 9.1新版本初体验
  5. shell脚本编写_shell脚本编写事例(dhcp自动安装和自动配置)
  6. mysql 内置存储过程_数据库:mysql内置功能-存储过程
  7. 沈是计算机专业考研分数线,计算机#2017年东北大学计算机考研究生分数线_计算机考研究生复试分数线...
  8. 深度学习笔记_基本概念_神经网络中的epoch、batch_size和iteration
  9. 设计模式_单例模式回顾_C++版不使用锁保证多线程安全
  10. Focal Loss for Dense Object Detection解读