来篇python爬虫入门
作者: 郭政鸿 2021/3/30
![](https://mmbiz.qpic.cn/mmbiz_jpg/N0HIVuxZOcZgCbDfJ6DD0Tmk6J3OpIscXuyavKPicjXeV4WeQ7FiaP8FhkYBh8M92weU389phIPX9AXRBZLuCjgA/640?wx_fmt=jpeg)
前言: 手头的工作弄完了, 突然就想写点python相关的文章, 于是就有了本文!
目标: 爬取微博实时热搜top50, 并发送到指定QQ邮箱
1、踩点抓包
目标站点: https://s.weibo.com/top/summary
抓包分析网络请求流程
image-20210330125003966
此站点为 服务端直出 页面, 那就好办了(此页面请求不需要鉴权, 鉴权的以后有空再说)
在写代码之前我们想捋一下流程
-
请求网页内容 (requets)
-
解析网页 (bs4)
-
提取内容并发送邮件 (smtplib)
2、爬取&解析内容
好了, 明确了上面这几步我们就可以开工了, 通过上面抓包我们已经拿到了请求的接口目标地址, https://s.weibo.com/top/summary
首先编写请求解析函数
def requestTop50(): # 接口地址 targetURL = 'https://s.weibo.com/top/summary' # 使用requests库发送get请求 res = requests.get(targetURL) # 将拿到的字符串结果通过bs4进行解析 html = BeautifulSoup(res.text, 'lxml') # 使用css选择器语法获取到内容 items = html.select('.ranktop + td a') # 存放结果的字典 result = {} # 遍历请求并解析到的结果 for index in range(len(items)): # 将解析好的结果存入字典中 result['top-' + str(index + 1)] = items[index].get_text() # 写入文件, 可以不写 with open('./result.txt', 'w') as f: f.write(str(result)) # 将数据返回 return result
通过上面的代码可以爬取到微博热搜top50的数据内容, 写到这里这个简单的入门爬虫就结束了, 但是我感觉内容太少了, 就加了个邮件发送的功能.
将我们请求到的结果发送到指定的QQ邮箱
3、发送内容到指定QQ邮箱
再开始之前, 我们需要先到自己的QQ邮箱中开启SMTP服务, 并且获取QQ邮箱的授权码, 否则后续的步骤进行不下去了
获取授权码步骤: QQ邮箱设置 --> 账户 --> 然后如下图
image-20210330132005392
进行一个简单的认证后我们可以得到一个授权码, 下面的代码将会用到
万事具备, 可以编写发送邮件的功能了
def sendEmail(config, message): try: # 需要发送的邮件内容 msg = MIMEText(message["content"],'plain','utf-8') # 邮件发送者信息 msg['From'] = formataddr([message["sender_name"], config['from_account']]) # 邮件接收者信息 msg['To'] = formataddr([message["receiver_name"], config['to_account']]) # 邮件主题 msg['Subject'] = message["subject"] # SMTP服务器地址及端口, 这里使用腾讯QQ邮箱的SMTP地址, 不用改 server=smtp.SMTP_SSL("smtp.qq.com", 465) # 配置发送者的邮箱账号和授权码(注意不是邮箱密码) server.login(config['from_account'], config['secret']) # 开始发送邮件 server.sendmail(config['from_account'], [config['to_account']], msg.as_string()) # 断开跟SMTP服务器的连接 server.quit() print("发送成功") except Exception: print("发送失败")
大功告成, 我们来把他组合一下! 就可以实现爬取微博热搜top50并且发送到某人QQ邮箱了
测试结果如下:
image-20210330140312483
完整代码
import requests from bs4 import BeautifulSoup import smtplib as smtp from email.mime.text import MIMEText from email.utils import formataddr def requestTop50(): targetURL = 'https://s.weibo.com/top/summary' res = requests.get(targetURL) html = BeautifulSoup(res.text, 'lxml') items = html.select('.ranktop + td a') result = {} for index in range(len(items)): result['top-' + str(index + 1)] = items[index].get_text() with open('./result.txt', 'w') as f: f.write(str(result)) return result def sendEmail(config, message): try: msg = MIMEText(message["content"],'plain','utf-8') msg['From'] = formataddr([message["sender_name"], config['from_account']]) msg['To'] = formataddr([message["receiver_name"], config['to_account']]) msg['Subject'] = message["subject"] server=smtp.SMTP_SSL("smtp.qq.com", 465) server.login(config['from_account'], config['secret']) server.sendmail(config['from_account'], [config['to_account']], msg.as_string()) server.quit() print("发送成功") except Exception: print("发送失败") if __name__ == '__main__': config = { # 发送者邮箱 "from_account": "xxxx@qq.com", # 授权码 "secret": "xxxxxxxxxxxxxxx", # 接收者邮箱 "to_account": "xx@qq.com" } result = requestTop50() sendEmail(config, { "sender_name": "帅鸿", "receiver_name": "美女xx", "subject": "<<在么?>>", "content": "这里输入的是你想要和对方说的骚话!" })
4、总结
这只是一个简单的爬虫入门教程, 但是也阐述了爬虫的基本流程, 具体步骤无非就是获取数据, 解析数据, 进行数据分析及消费数据! 看到这里, 闷骚的朋友估计已经有想法了, 掌握了文中的知识后, 我们可以每天定时给女朋友们发送点爬取的骚言骚语, 或者做很多暖心的小tip等等❤️.
点击下方安全链接前往获取
CSDN大礼包:《Python入门&进阶学习资源包》免费分享
👉Python实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉Python书籍和视频合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉Python副业创收路线👈
这些资料都是非常不错的,朋友们如果有需要《Python学习路线&学习资料》,点击下方安全链接前往获取
CSDN大礼包:《Python入门&进阶学习资源包》免费分享
本文转自 网络,如有侵权,请联系删除。