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

在《第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. 【QT】QtConcurrent::run()+QThreadPool实现多线程

    往期链接: <QThread源码浅析> <子类化QThread实现多线程> <子类化QObject+moveToThread实现多线程> <继承QRunnab ...

  2. Python基础学习之常用模块

    1. 模块 告诉解释器到哪里查找模块的位置:比如sys.path.append('C:/python') 导入模块时:其所在目录中除源代码文件外,还新建了一个名为__pycache__ 的子目录,这个 ...

  3. Hive Join优化

    在阐述Hive Join具体的优化方法之前,首先看一下Hive Join的几个重要特点,在实际使用时也可以利用下列特点做相应优化: 1. 只支持等值连接 2. 底层会将写的HQL语句转换为MapRed ...

  4. currentColor在CSS的含义

    currentColor属于CSS中的一个变量,当然也有人称之为CSS的自定义属性,其代表"当前颜色". 在CSS中设置了color的值后,相应CSS代码块(由两个花括号包裹的内容 ...

  5. Luogu P6833 【[Cnoi2020]雷雨】

    这道题赛时的时候想了一个奇怪的做法但是没过,后来经过Stay_hungry的提示就码了这道题. 雷电必定会在一点处分叉,分别电击地上的两个点,我们只需要枚举这个分叉点.那么怎么算出这个点和目标点的距离 ...

  6. 基于 Nebula Operator 的 K8s 自动化部署运维

    摘要:Nebula Operator 是 Nebula Graph 在 Kubernetes 系统上的自动化部署运维插件.在本文,你将了解到 Nebula Operator 的特性及它的工作原理. 从 ...

  7. 线程范围内的环境变量---ThreadLocal

    package cn.itcast.heima2; import java.util.HashMap; import java.util.Map; import java.util.Random; p ...

  8. Java编译程序和运行过程详解

    java整个编译以及运行的过程相当繁琐,我就举一个简单的例子说明: 编译原理简单过程:词法分析 --> 语法分析 --> 语义分析和中间代码生成 --> 优化 --> 目标代码 ...

  9. 阿里云的nginx的https配置问题

    server { listen 443 ssl; server_name www.xxx域名.com; root html; index index.html index.html; ssl_cert ...

  10. zabbix的搭建及操作(3)监控 MySQL 及 HTTP 状态监控

    书接上回 -- 详情点击 Server端以配置好 mariadb(MySQL) 及 http 服务 Zabbix实现监控 mysql 数据库 server服务器端配置 vim /usr/local/z ...