python的爬虫(六)(适合新手)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43701019/article/details/99707162

——个人笔记

一系列:
python爬虫(一)
python爬虫(二)
python爬虫(三)
python爬虫(四)
python爬虫(五)
python爬虫(七)
python爬虫(八)
python爬虫(九)
python爬虫(十)
python爬虫(十一)


这里只有思路过程,不同的页面可能会有不同。

  • 首先我们要找到登录界面,就是输入账号密码的那个页面。然后右键,检查,Network,把Preserve log勾选了,然后我们正常登录一下。查看network里面有关于服务的XHR,比如CSDN里的:在这里插入图片描述
    然后我们发现,圈圈那个是POST,如果你之前爬取有注意的话,应该是GET。这个就是登录的不同了,登录是要访问这个网址的服务器,来请求登录 :
#这只是大概模样
login_url = #这里的url就是登录时查看的有关于服务的XHR里的url

#加请求头,前面有说过加请求头是为了模拟浏览器正常的访问,避免被反爬虫。
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
}

#把有关登录的参数封装成字典,赋值给data。带*通常就是含有的,其他要在有关于服务的XHR里看有没有这些参数
data = {
'log':  ,    # *账户 
'pwd':  ,   # *密码 
'wp-submit': '登录', 
'redirect_to':  #登录后跳转位置
'testcookie': '1' # cookie值
}

#用requests.post发起请求,放入参数:请求登录的网址、请求头和登录参数,然后赋值给login_in。
login_in = requests.post(login_url,headers=headers,data=data)

#打印login_in,检查是否成功,成功会输出200
print(login_in)


  • 然后到你要评论的平台的任意一个可评论的文章,然后同样打开右键,检查,Network,把Preserve log勾选了,然后我们正常评论一下。查看network里面有关于服务的XHR或者other,比如CSDN里的:
    在这里插入图片描述
    还要提取和调用登录的cookies,这样才能成功评论哦
    在这里插入图片描述
#提取cookies的方法:调用requests对象(login_in)的cookies属性获得登录的cookies,并赋值给变量cookies。
cookies = login_in.cookies

blog_url     #同样道理,上图的url
#同登录道理一样,查看上图找到的那个服务,应该会有From Data之类的
comment = {
    "content": "水军评论测试"  ,
}
 
r2 = requests.post(blog_url, comment,cookies=cookies)
print(r2.text)#应该能输出你评论的信息

上面的就是登录加评论了,但是每次都要自己输入账号密码或者直接摆账号密码,这样不太好,我们就要学习session了。


session运用,把requests改为session:

#用requests.session()创建session对象,相当于创建了一个特定的会话,帮我们自动保持了cookies。
session = requests.session()

#在创建的session下用post发起登录请求,放入参数:请求登录的网址、请求头和登录参数。
#不用requests了,用session
session.post(login_url,headers=headers,data=data)

#在创建的session下用post发起评论请求,放入参数:文章网址,请求头和评论参数,并赋值给comment。
#这样就不用自己提取cookies了
session.post(blog_url,headers=headers,data=data_1)

在这里插入图片描述
但是上面的代码也没有解决我们要每次输入账号密码或者直接把账号密码摆出来的问题,那么我们就要存储cookies和提取cookies了。


  • 存储cookies(要把cookies转为字典再转为字符串)

    cookies_dict = requests.utils.dict_from_cookiejar(session.cookies)
    #把cookies转化成字典。
     
    cookies_str = json.dumps(cookies_dict)
    #调用json模块的dumps函数,把cookies从字典再转成字符串。
    
    f = open('cookies.txt', 'w')
    #创建名为cookies.txt的文件,以写入模式写入内容。
    f.write(cookies_str)
    #把已经转成字符串的cookies写入文件。
    f.close()
    #关闭文件。
    
  • 读取cookies

    cookies_txt = open('cookies.txt', 'r')
    #以reader读取模式,打开名为cookies.txt的文件。
    cookies_dict = json.loads(cookies_txt.read())
    #调用json模块的loads函数,把字符串转成字典。
    cookies = requests.utils.cookiejar_from_dict(cookies_dict)
    #把转成字典的cookies再转成cookies本来的格式。
    session.cookies = cookies
    #获取cookies:就是调用requests对象(session)的cookies属性。
    

但是cookies是会有时效性的,所以我们应该这样写
在这里插入图片描述

try:
#如果能读取到cookies文件,执行以下代码,跳过except的代码,不用登录就能发表评论。
    cookies_txt = open('cookies.txt', 'r')
    #以reader读取模式,打开名为cookies.txt的文件。
    cookies_dict = json.loads(cookies_txt.read())
    #调用json模块的loads函数,把字符串转成字典。
    cookies = requests.utils.cookiejar_from_dict(cookies_dict)
    #把转成字典的cookies再转成cookies本来的格式。
    session.cookies = cookies
    #获取cookies:就是调用requests对象(session)的cookies属性。

except FileNotFoundError:
#如果读取不到cookies文件,程序报“FileNotFoundError”(找不到文件)的错,则执行以下代码,重新登录获取cookies,再评论。

    login_url = '    '
    #登录的网址。
    data = {'log': input('请输入你的账号:'),
            'pwd': input('请输入你的密码:'),
            'wp-submit': '登录',
           }
    #登录的参数。
    
    session.post(login_url, headers=headers, data=data)
    #在会话下,用post发起登录请求。

    cookies_dict = requests.utils.dict_from_cookiejar(session.cookies)
    #把cookies转化成字典。
    cookies_str = json.dumps(cookies_dict)
    #调用json模块的dump函数,把cookies从字典再转成字符串。
    f = open('cookies.txt', 'w')
    #创建名为cookies.txt的文件,以写入模式写入内容
    f.write(cookies_str)
    #把已经转成字符串的cookies写入文件
    f.close()
    #关闭文件

blog_url = '    '
#文章的网址。

data_1 = {
'comment': input('请输入你想评论的内容:'),
'submit': '发表评论', 
}
#评论的参数。

comment = session.post(blog_url,headers=headers,data=data_1)
#在创建的session下用post发起评论请求,放入参数:文章网址,请求头和评论参数,并赋值给comment。

本人学习中,尝试自动评论CSDN不成功,有大佬知道请告知,本人学会就会更新。

猜你喜欢

转载自blog.csdn.net/weixin_43701019/article/details/99707162