写在前面:本文仅供参考学习,请勿用作它途,禁止转载!

在《第14.14节 爬虫实战准备:csdn博文点赞过程http请求和响应信息分析》老猿分析了csdn博文点赞处理的http请求和响应报文,在《第14.15节 爬虫实战1:使用Python和selenium实现csdn博文点赞》中通过selenium方式实现了博文自动点赞,但selenium方式老猿觉得并不是一个真正的爬虫实现方式,因此本节老猿将通过request+BeautifulSoup的方式实现一个真正爬虫式的CSDN博文自动点赞。

二、 csdn点赞实现的基本思路

本节将实现读取文本文件c:\temp\urllist.txt中的需要点赞的csdn博文记录(一行一个url地址),对每一行记录逐一进行如下处理:

1、 利用已经登录会话读取博文并利用beatifulsoap解析判断博文是否已经点赞,如果是则处理下一条url。本步骤需要知道:

1)怎么利用已经登录会话构建http请求头(函数mkhead)模拟已登录会话的浏览器访问,具体知识请参考《第14.5节 利用浏览器获取的http信息构造Python网页访问的http请求头》;

2)怎么使用beatifulsoap解析报文,本次老猿构建beatifulsoap对象soup后,使用“标签+属性+属性值”的css 选择器来定位点赞按钮,代码为“soup.select(“button[title=‘点赞’]”)”,相关方法请参考《第14.12节 Python中使用BeautifulSoup解析http报文:使用select方法快速定位内容》。

2、 根据博文地址计算出点赞http请求的url,对应函数为getthumbsupURL;

3、 发送点赞的url请求并读取返回的响应报文;

4、 对响应报文解码后判断是否点赞成功,具体判断方法请参考《第14.14节 爬虫实战准备:csdn博文点赞过程http请求和响应信息分析》。代码中判断点赞成功没有使用beatifulsoap,直接使用字符串查找方法,因为该响应报文非常简单,使用字符串查找非常方便。

三、 完整点赞代码

注意:http请求的cookie参数老猿在下面代码中采用了只取一部分真实数据处理以保护老猿自己的会话信息安全,各位需要按照《第14.5节 利用浏览器获取的http信息构造Python网页访问的http请求头》介绍的方法将自己的信息填入请求头中。

#coding:utf-8
#使用request和beatifulosap实现csdn博文点赞
import time
import fileinput
from bs4 import BeautifulSoup
import urllib.request def mkhead():
#根据使用人员登录csdn的http会话信息填写
header = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'Accept-Language':'zh-CN,zh;q=0.9',
'Connection':'keep-alive',
'Cookie':'uuid_tt_dd=10_35489889920-1563497330616-876822; UserName=LaoYuanPython;......',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'} return header def getthumbsupURL(articleURL):
"""
根据点赞文章的url地址计算出点赞请求的url,二者url案例如下:
需要点赞文章:https://blog.csdn.net/LaoYuanPython/article/details/100585881
点赞请求:https://blog.csdn.net/laoyuanpython/phoenix/article/digg?ArticleId=100585881
""" urlwords = articleURL.split('/')
articleid = urlwords[6]
digurlwords = urlwords[0:4]
digurlwords.append('phoenix/article/digg?ArticleId='+articleid)
digurl = ''
for words in digurlwords:
digurl = digurl+words+'/'
return digurl def isthumbsup(url,header):
"""
读取指定url的博文判断是否已经点赞
返回值:
True:已经点赞或读取报文失败
False:未点赞
""" req = urllib.request.Request(url=url,headers=header)
try: text = urllib.request.urlopen(req).read().decode()
except Exception:
print(f"读取 {url} 内容解码判断是否点赞失败,失败原因:\n{e}")
soup = BeautifulSoup(text, 'lxml') button1 = soup.select("button[title='点赞']")
button2 = soup.select("button[title='取消点赞']")
if button1: return False
elif button2:return True def thumbsup(url):
"""
对指定url的cdn博文点赞
url:需要点赞文章的url
""" #判断该博文是否已经点赞过
header = mkhead()
thumbsuped = isthumbsup(url,header)
if thumbsuped:
print(f"{url} 已点赞!")
return 2
thumbsupUrl = getthumbsupURL(url)
req = urllib.request.Request(url=thumbsupUrl,headers=header)
text = urllib.request.urlopen(req).read().decode() if text.find('"status":true')>=0:
print(f"{url} 点赞成功!")
return 1
else:
print(f"{url} 点赞失败!")
return 0 def batchthumbsup(filename):
count = 0
for line in fileinput.input(filename):
urlline = line.strip(' \r\n')
thumbsup(urlline)
count+=1
if count>=5:break
time.sleep(1) batchthumbsup(r'c:\temp\urllist.txt')

大家将上述代码拷贝存入一个py文件中,并将其中的cookie替换为自己登陆的cookie信息,就可以以自己的账户给他人博文点赞了。不过注意,为了保持代码简洁,老猿都没有加异常处理,真正实现时最好加上。

老猿Python,跟老猿学Python!

博客地址:https://blog.csdn.net/LaoYuanPython


老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036

请大家多多支持,点赞、评论和加关注!谢谢!

第14.16节 爬虫实战2:赠人玫瑰,手留余香! request+BeautifulSoup实现csdn博文自动点赞的更多相关文章

  1. 第14.15节 爬虫实战1:使用Python和selenium实现csdn博文点赞

    写在前面:本文仅供参考学习,请勿用作它途,禁止转载! 在开始学爬虫时,学习了csdn博客专家(id:明天依旧可好 | 柯尊柏)<实战项目二:实现CSDN自动点赞>的文章,文章介绍了通过Py ...

  2. 第14.18节 爬虫实战4: request+BeautifulSoup+os实现利用公众服务Wi-Fi作为公网IP动态地址池

    写在前面:本文相关方法为作者独创,仅供参考学习爬虫技术使用,请勿用作它途,禁止转载! 一. 引言 在爬虫爬取网页时,有时候希望不同的时候能以不同公网地址去爬取相关的内容,去网上购买地址资源池是大部分人 ...

  3. 第14.17节 爬虫实战3: request+BeautifulSoup实现自动获取本机上网公网地址

    一. 引言 一般情况下,没有特殊要求的客户,宽带服务提供商提供的上网服务,给客户家庭宽带分配的地址都是一个宽带服务提供商的内部服务地址,真正对外访问时通过NAT进行映射到一个公网地址,如果我们想确认自 ...

  4. 第14.14节 爬虫实战准备:csdn博文点赞过程http请求和响应信息分析

    如果要对csdn博文点赞,首先要登录CSDN,然后打开一篇需要点赞的文章,如<第14.1节 通过Python爬取网页的学习步骤>按<第14.3节 使用google浏览器获取网站访问的 ...

  5. Python 爬虫实战(一):使用 requests 和 BeautifulSoup

    Python 基础 我之前写的<Python 3 极简教程.pdf>,适合有点编程基础的快速入门,通过该系列文章学习,能够独立完成接口的编写,写写小东西没问题. requests requ ...

  6. Python 爬虫实战(二):使用 requests-html

    Python 爬虫实战(一):使用 requests 和 BeautifulSoup,我们使用了 requests 做网络请求,拿到网页数据再用 BeautifulSoup 解析,就在前不久,requ ...

  7. 第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解

    第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解 封装模块 #!/usr/bin/env python # -*- coding: utf- ...

  8. Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺

    更新 其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 可就在今天,淘宝把所有的账号设置成了匿名显示,SO,获取非匿名旺旺号已经 ...

  9. Python爬虫实战六之抓取爱问知识人问题并保存至数据库

    大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...

随机推荐

  1. JS数组去重的9种方法(包括去重NaN和复杂数组类型)

    其实网上已经有很多js数组的去重方法,但是我看了很多篇并自己通过代码验证,发现都有一些缺陷,于是在研究多篇代码之后,自己总结了9种方法,如果有哪里不对请及时纠正我哈~ 转载请表明出处 测试代码 let ...

  2. 《Machine Learning in Action》—— 剖析支持向量机,单手狂撕线性SVM

    <Machine Learning in Action>-- 剖析支持向量机,单手狂撕线性SVM 前面在写NumPy文章的结尾处也有提到,本来是打算按照<机器学习实战 / Machi ...

  3. python类继承中构造子的调用

    python面向对象中的继承关系中,子类对父类的构造方法的调用有两种方法: 父类名.__init__(self,参数) #注意名字是父类 super(本子类名,self)__init__(其他参数) ...

  4. C++ 设计模式--模板模式、策略模式、观察者模式

    现代软件设计特征:需求频繁变化 设计模式的要点是"寻找变化点",在变化点应用设计模式,从而更好的应对需求变化. 1. Template Method 在软件构建结构中,往往他有整体 ...

  5. 有了Cloud Alert电话报警,再也不怕遗漏告警了

    Cloud Alert 的部分应用部署在阿里云上,使用了多方面的监控服务: 阿里自身的ECS服务器和网站. Zabbix 监控服务器应用程序. OneAPM 的应用级监控. 腾讯云拨测,做网站监控. ...

  6. linux 内核并发同步 2

    信号量semaphore 信号量是一种允许进程进入睡眠的同步机制,信号量是一个计数器,支持两种原语即P 和V操作,也就是down 和up 操作, /* Please don't access any ...

  7. Socket 套接字的系统调用

    socket 结构 /** * struct socket - general BSD socket * @state: socket state (%SS_CONNECTED, etc) * @ty ...

  8. Java基础 之三 继承

    1.子类 1) 定义子类 //假设父类(也叫做超类)是Employee类,用extends来表示继承 public class Manager extends Employee{ //域和方法 pri ...

  9. ctfshow之Web入门刷题记(从89开始,持续更新)

    0x01Web89-99PHP特性payload Web89 include("flag.php"); highlight_file(__FILE__); if(isset($_G ...

  10. ESP定律脱壳——NsPack3.x脱壳

    首先进行查壳,NsPack 将程序拖入x64dbg 程序入口处标志性的push F8单步,发现仅有esp寄存器有变化 在esp上右键,在内存窗口查看,下硬件断点 F9运行程序,程序断在pop之后. 使 ...