四个月前写的一个小功能,跑通了,没有正式使用。《用Python打造一款简信助手--简@(V0.1)》。只是完成了能发送站内消息(简信)-- 提交表单的功能,主要有一个参数获取时比较麻烦,不能从一个用户的主页中直接获取到发送消息时对方的id,当时是手动获取这个值。昨天完善一下,试用OK。
需要的参数 /chats/7094551/chat_messages
,chats后面的整数,就是发送对方的id。而这个id在设计时并不是打开对话页面的id: mail_to,如:
http://www.jianshu.com/chats/new?mail_to=2899894
这个id是通过访问mail_to页面(消息对话页面)表单中的一个值。而mail_to页面的url获取,在用户主页下,有一个“写简信”的标签可以取到。
简单说,也就是要从用户ID能获取到简信ID。而这个过程需要经过发送两个请求,经过两个页面,解析不同页面数据,来获得这个参数。总结一下流程:
1)访问用户主页获取写简信chat/new?mail_to=xxx
的url;
2)访问chat/new?mail_to=xxx
对话页面,从页面表单中action=
中解析获取发送到对方的id;
3)构造发送简信表单数据,发送。
代码:
def getPostId(url):
html = getHtml(url)
soup = BeautifulSoup(html, 'html.parser', from_encoding='utf-8')
links = soup.find_all('a')
# 登录状态 Cookie登录
# 从用户主页 解析出来简信对话的url : http://www.jianshu.com/chats/new?mail_to=3258479
posturl='http://www.jianshu.com'+links[37]['href']
# 登录状态 Cookie登录
# 打开简信对话url, 解析出发送简信的ID, 即获得 action="/chats/7094014/chat_messages" 中的数字
html = getHtml(posturl)
soup = BeautifulSoup(html, 'html.parser', from_encoding='utf-8')
links = soup.find_all('form')
us = links[0]['action'].split('/')
return us[2]
注意以上的页面请求,都是要在登录状态下发出,不然获取不到相应值,造成第二次请求错误。登录仍然使用Cookie方式。
PS:
简书 @IT·互联网专题 用户关注量从4个月前的8万多,到上周已突破26万。
专题新增一个编委 **创业人张涵 **,居然是一位95后的创业者。欢迎勾搭。
网友评论