python实战阶段2

本片博客主要再介绍两个爬虫项目:
  • 1.爬去天气(发送人的邮箱开通stmp才可以发邮件)
  • python爬取你喜欢的公众号的所有原创文章
 

项目实战参考一:python爬取你喜欢的公众号的所有原创文章

 
 
准备工作:我们需要提前安装好一个抓包工具(客户端或是app抓取电脑发送的请求和接受响应的)
Fiddler抓包工具的基本介绍,安装和下载可以参考这个链接:https://www.cnblogs.com/cherrycui/p/10580031.html
手机端抓包的设置可以参考这个链接: https://www.cnblogs.com/wushuaishuai/p/9300262.html
 
我以爬取公众号谢公子学安全为例:
当我点进某个文章的时候
使用fiddler获取到
url:
https://mp.weixin.qq.com/mp/getappmsgext?f=json&mock=&uin=NzU3OTg2NzE2&key=82eb7d7c3126bb970554f401df19ecc5ec0c14f099566f7cba79dfbd4b7b6cf462d8e38ab7416a8a4da25f14bb22e44e3ff5dcab5158327522e7d6e01e8b273d6180fc2b67d903a8f5c148095330edc9&pass_ticket=X2%25252F7Ryy5s8UFGeFzV9eMwYQaHCZEERLkEjGliS9N6Zxwewl2rZZOZ93uiVR6m5F%25252B&wxtoken=777&devicetype=Windows%26nbsp%3B10&clientversion=62060841&__biz=MzI2NDQyNzg1OA%3D%3D&appmsg_token=1044_5KADmv4BD7%252B0eP9a9pdxxZUP3lD3XN0odJoSrmkKpfKkaBnz2s1sQUU5Ah_3k4QWX25nhZTRsoYofQWy&x5=0&f=json
 
cookie:
rewardsn=; 
wxtokenkey=777; 
wxuin=757986716; 
devicetype=Windows10; 
version=62060841; 
lang=zh_CN; 
pass_ticket=X2/7Ryy5s8UFGeFzV9eMwYQaHCZEERLkEjGliS9N6Zxwewl2rZZOZ93uiVR6m5F+; wap_sid2=CJzrt+kCElx2Z0F6aWZiWmhZLTFQVEh0MmduOHF4RVd5ZXJ3dldCaGw5OWJYbkpDV2dKN0FtYVZiU0I3RDFkVmlnQU13dkJERUpSNi04RVJBQ1ZIQWpqUXJyYzJuUlFFQUFBfjDGqoDxBTgNQAE=
 
请求参数:
 
 
 
大概步骤:
设置参数,cookie,url 和基本的请求参数
# 这些信息不能抄我的,要用你自己的才有效
headers = {
    'Connection': 'keep - alive',
    'Accept': '* / *',
    'User-Agent': '写你自己的',   #用户的浏览器
    'Referer': '写你自己的',      #上次请求的链接
    'Accept-Encoding': 'br, gzip, deflate'
}

#使用的时候可以把整段贴上去,但最少仅需要wap_sid2这部分
cookies = {
    'devicetype': 'iOS12.2',
    'lang': 'zh_CN',
    'pass_ticket': '写你自己的',   
    'version': '1700042b',
    'wap_sid2': '写你自己的',
    'wxuin': '3340537333'
}


def get_params(offset):
    params = {
        'action': 'getmsg',
        '__biz': '写你自己的',#相当于是当前公众号的id(唯一固定标志)
        'f': 'json',
        'offset': '{}'.format(offset),#文章数据接口请求偏移量标志(从0开始),每次返回的json数据中会有下一次请求的offset
        'count': '10',#每次请求的数据量(亲测最多可以是10)
        'is_ok': '1',
        'scene': '126',
        'uin': '777',
        'key': '777',
        'pass_ticket': '写你自己的',#可以理解是请求票据,而且隔一段时间后(大概几个小时)就会过期,
        'appmsg_token': '写你自己的',#同样理解为非固定有过期策略的票据
        'x5': '0',
        'f': 'json',
    }


发送请求
res = requests.get(base_url, headers=headers, params=get_params(offset), cookies=cookies)
data = json.loads(res.text)
解析获得的数据
can_msg_continue = data['can_msg_continue']   #can_msg_continue介绍标记符
next_offset = data['next_offset']     #下一篇文章的offset
general_msg_list = data['general_msg_list']
list_data = json.loads(general_msg_list)['list']
遍历获取到url,做出参数打印为pdf格式
for data in list_data:
    try:
        if data['app_msg_ext_info']['copyright_stat'] == 11:   #copyright_stat=11表示原创
            msg_info = data['app_msg_ext_info']
            title = msg_info['title']
            content_url = msg_info['content_url']
            # 自己定义存储路径
            pdfkit.from_url(content_url, 'C:\\Users\\Apple\\Desktop\\'+title+'.pdf')
            print('获取到原创文章:%s : %s' % (title, content_url))
    except:
        print('不是图文')
循环判断
if can_msg_continue == 1:    
    time.sleep(1)
    get_list_data(next_offset)

 

 
源码注意:
  • 原创的文章才被爬取打印成pdf
  • 文章只有图文组成才会打印成pdf
  • 源码只需要修改请求的参数和cookie即可
  • 运行项目的时候记得连上网,关掉fiddler代理
 

项目实战参考二:爬取天气和每日一句发邮件给女朋友

 
 
源码如下:
 
# 导入模块
import requests, json,smtplib


# 获取天气
def getWhether(city,link):
    url = link+ city
    r = requests.get(url).json()
    msg = '\r\n亲爱的,今日天气是'+r['data']['forecast'][0]['type'] + '\r\n温度:'+r['data']['forecast'][0]['high'] + '--'+r['data']['forecast'][0]['low'] + '\r\n风:'+r['data']['forecast'][0]['fengli'][9:-3] +'--'+r['data']['forecast'][0]['fengxiang']+'\r\n\r\n'+r['data']['ganmao']+'\r\n'
    return str(msg)
# 获取每日一句话
def getWord(link):
    r = requests.get(link).json()
    msg ='\r\n\r\n'+  r['content'] + ' \r\n'+ r['note']
    return str(msg)
# 一些用到的数据
data = {
    'link':'http://open.iciba.com/dsapi/',
    'link2':'http://wthrcdn.etouch.cn/weather_mini?city=',
    'city':'上海',
    'first':'您的小可爱上线啦!\r\n',
    'last':'\r\n\r\n                                       ——最爱你的人儿~'
}


# 构造邮件的文本数据
msg = data['first'] +getWhether(data['city'],data['link2'])  + getWord(data['link']) + data['last']
message = """From: From Person <发件人的邮箱>
To: To Person <收件人的邮箱>
Subject: 亲爱的。请点击查收!

This is a  e-mail message.
""" + msg

# 发送邮件
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com',25)
smtp.login('发件人的邮箱', '邮箱授权码')#注意这里是邮箱授权码不是邮箱密码!
smtp.sendmail('发件人的邮箱', '收件人的邮箱', message.encode('utf-8'))
smtp.quit()

print('Done !')

 

注意:
       
 
 
 
 
 
发布了18 篇原创文章 · 获赞 54 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览