吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2677|回复: 12
收起左侧

[Python 转载] 日常作品分享------模拟登录豆瓣并根据电影名称发表评论

  [复制链接]
zqc8 发表于 2019-10-20 12:11
本帖最后由 zqc8 于 2019-10-22 18:04 编辑

我又来啦,今天跟大家分享的是大家熟悉的豆瓣,主要功能是实现模拟登录,并根据电影名称发表评论,呃.......似乎就这样了,

需要说一下,
最后几次我测试只是成功登录上去,评论并没有发表成功,不知道是不是由于豆瓣对我的帐号进行了评论限制,麻烦有豆瓣帐号的朋友帮我试下代码,谢谢!(已更新解决)

另外再打个小广告,之前的作品【理论可爬全站壁纸图片(不是缩略图哦)-----https://www.52pojie.cn/thread-1037157-1-1.html】我做了些修改,修改后基本上可以实现真正的爬取全站图片(总共1800个主题,亲测试爬200+个主题,差不多1G的图片)


代码全文如下,有不懂的欢迎评论区留言,若有觉得写得不好或者还有改进的余地,欢迎提出,谢谢!


2019.10.22日更新:
1:解决评论发表失败问题
失败系因为系统设置评论请求表单中的ck值为随机值,而本人此前误将其视为固定值所致,问题已得到解决,修改代码请见:【26-32】行



[Python] 纯文本查看 复制代码
#1.在某些地方添加了若干个print(),其并无实际意义,仅用于输出美化使用.
#2.运行代码前,请在系统浏览器多次登录豆瓣帐号(需成功登录)直到登录不再出现验证码,避免代码登录需要输入验证.
#3.需要安装的第三方库: requests
import requests,json,string,re
from urllib.parse import quote

#获取电影链接id
def get_movie_id(headers):
    print()
    movie_name_prompt = "请输入电影名称:" #输入提示语
    while True:
        movie_name = input(movie_name_prompt)
        temp_url = "https://movie.douban.com/j/subject_suggest?q={}".format(movie_name)
        data_url = quote(temp_url, safe=string.printable)  # 网址转码(Python无法识别带中文符号的链接)
        html = requests.get(data_url, headers=headers).text
        data = json.loads(html)
        try: #检测电影名称的有效性
            movie_id = data[0]["id"]
            return movie_id
        except IndexError:
            movie_name_prompt = "检索失败,请重新输入电影名称:"
            continue

        
#获取ck值(发表评论表格需要)
def get_ck(session,movie_url):
    html = session.get(movie_url).text
    p_check_id = r'<input type="hidden" name="ck" value="(.+)"/>'
    check_id = re.findall(p_check_id,html)[0]

    return check_id


#登录帐号
def login(session,home_url,login_post_url,headers):
    douban_nickname = input("请输入您的豆瓣名称:") #用于判断是否登录成功
    passnmae_prompt = "请输入您的登录帐号:"
    password_prompt = "请输入您的登录密码:"
    while True:
        passname = input(passnmae_prompt)
        password = input(password_prompt)
        login_form_data = {}
        login_form_data["ck"] = " "
        login_form_data["name"] = passname
        login_form_data["password"] = password
        login_form_data["remember"] = "false"
        login_form_data["ticket"] = " "

        session.post(login_post_url, data=login_form_data, headers=headers)
        check_response_text = session.get(home_url, headers=headers).text

        if douban_nickname in check_response_text:
            print()
            print("登录成功")
            return session
        else:
            print()
            print("登录失败,请重新尝试.")
            passnmae_prompt = "请重新输入登录帐号:"
            password_prompt = "请重新输入登录密码:"
            continue

#评论发表
def make_comment(session,movie_comment_post_url,check_id,headers):
    print()
    comment = input("请输入评论内容:")
    #interest = input("请输入您的评论状态(想看/看过):")
    comment_form_data = {}
    comment_form_data["ck"] = check_id
    comment_form_data["interest"] = "wish"
    #comment_form_data["rating"] = " "  #此处为平分等级,可以添加,但是考虑到显示出来比较麻烦就让他留空了.下tags同
    comment_form_data["foldcollect"] = "F"
    #comment_form_data["tags"] = " "  #此处为便签,
    comment_form_data["comment"] = comment

    session.post(movie_comment_post_url,headers=headers,data=comment_form_data)
    check_comment_response_text = session.get(movie_comment_post_url,headers=headers).text

    if comment in check_comment_response_text:
        print()
        print("评论成功")
    else:
        print()
        print("评论失败")


def main():
    home_url = "https://www.douban.com/"
    login_post_url = "https://accounts.douban.com/j/mobile/login/basic"

    headers = {}
    headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"

    session = requests.Session()  #创建回话,以保持登录状态.
    login(session,home_url,login_post_url,headers) #登录帐号

    moive_id = get_movie_id(headers) #获取电影id
    movie_comment_post_url = "https://movie.douban.com/j/subject/{}/interest".format(moive_id)

    movie_url = "https://movie.douban.com/subject/{}/".format(moive_id)
    check_id = get_ck(session,movie_url)
    
    make_comment(session,movie_comment_post_url,check_id,headers) #发表评论


if __name__ == "__main__":
    main()

免费评分

参与人数 4吾爱币 +6 热心值 +4 收起 理由
苏紫方璇 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
menghen + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
zkl201952pojie + 1 + 1 热心回复!
joneqm + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| zqc8 发表于 2020-2-16 22:39
zucker 发表于 2020-2-16 22:32
优化下,改成随机评论

这个倒是更简单些,只是当时为了多做点练习才选择的搜索评论
 楼主| zqc8 发表于 2020-2-16 22:48
zucker 发表于 2020-2-16 22:44
你被豆瓣封过吗

我只是做练习,随便找几个评论实验下就好了,又不批量刷,封我干啥
zkl201952pojie 发表于 2019-10-20 12:16
 楼主| zqc8 发表于 2019-10-20 12:16
哈哈,谢谢大家的评分!
我无聊路过1989 发表于 2019-10-20 12:43
谢谢楼主的分享
netCheney 发表于 2019-10-20 17:10
谢谢楼主的分享,支持一下
ly765893958 发表于 2019-10-21 16:28
感谢分享
 楼主| zqc8 发表于 2019-10-22 18:05

谢谢支持,
zucker 发表于 2020-2-15 10:45
好帖子一个
 楼主| zqc8 发表于 2020-2-16 21:58

多谢赞赏!
zucker 发表于 2020-2-16 22:32
优化下,改成随机评论
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-26 12:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表