第14.16节 爬虫实战2:赠人玫瑰,手留余香! request+BeautifulSoup实现csdn博文自动点赞
写在前面:本文仅供参考学习,请勿用作它途,禁止转载!
在《第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博文自动点赞的更多相关文章
- 第14.15节 爬虫实战1:使用Python和selenium实现csdn博文点赞
写在前面:本文仅供参考学习,请勿用作它途,禁止转载! 在开始学爬虫时,学习了csdn博客专家(id:明天依旧可好 | 柯尊柏)<实战项目二:实现CSDN自动点赞>的文章,文章介绍了通过Py ...
- 第14.18节 爬虫实战4: request+BeautifulSoup+os实现利用公众服务Wi-Fi作为公网IP动态地址池
写在前面:本文相关方法为作者独创,仅供参考学习爬虫技术使用,请勿用作它途,禁止转载! 一. 引言 在爬虫爬取网页时,有时候希望不同的时候能以不同公网地址去爬取相关的内容,去网上购买地址资源池是大部分人 ...
- 第14.17节 爬虫实战3: request+BeautifulSoup实现自动获取本机上网公网地址
一. 引言 一般情况下,没有特殊要求的客户,宽带服务提供商提供的上网服务,给客户家庭宽带分配的地址都是一个宽带服务提供商的内部服务地址,真正对外访问时通过NAT进行映射到一个公网地址,如果我们想确认自 ...
- 第14.14节 爬虫实战准备:csdn博文点赞过程http请求和响应信息分析
如果要对csdn博文点赞,首先要登录CSDN,然后打开一篇需要点赞的文章,如<第14.1节 通过Python爬取网页的学习步骤>按<第14.3节 使用google浏览器获取网站访问的 ...
- Python 爬虫实战(一):使用 requests 和 BeautifulSoup
Python 基础 我之前写的<Python 3 极简教程.pdf>,适合有点编程基础的快速入门,通过该系列文章学习,能够独立完成接口的编写,写写小东西没问题. requests requ ...
- Python 爬虫实战(二):使用 requests-html
Python 爬虫实战(一):使用 requests 和 BeautifulSoup,我们使用了 requests 做网络请求,拿到网页数据再用 BeautifulSoup 解析,就在前不久,requ ...
- 第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解
第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解 封装模块 #!/usr/bin/env python # -*- coding: utf- ...
- Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺
更新 其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 可就在今天,淘宝把所有的账号设置成了匿名显示,SO,获取非匿名旺旺号已经 ...
- Python爬虫实战六之抓取爱问知识人问题并保存至数据库
大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...
随机推荐
- C中二叉排序树的非递归和递归插入操作以及中序遍历代码实现【可运行】
C中二叉排序树的非递归和递归插入操作以及中序遍历代码实现[可运行] #include <stdio.h> #include <stdlib.h> typedef int Key ...
- Spider_基础总结1_Request(get/post__url传参_headers_timeout)+Reponse
网络爬虫(一) 一.简介 1.robot协议(爬虫协议):这个协议告诉引擎哪些页面可以抓取,哪些不可以 -User-agent:爬虫引擎 -allow:允许robot访问的URL -disallow: ...
- [MIT6.006] 18. Speeding up Dijkstra 加速Dijkstra算法
在之前的课我们讲过了Dijkstra算法,先回顾下,如下图: 那么如果加速DIjkstra算法寻找最短路径呢?这节课上讲师讲了两种方法:双向搜索(Bi-Directional Search)和目标方向 ...
- Gromacs文件-Chapter1
Gromacs的文件非常的多,这是官方文档地址:http://manual.gromacs.org/online/files.html. 本文章部分内容来自以下网址https://zhuanlan.z ...
- 极客mysql13
1:为啥删除了表的一半数8据,表文文件大小没变化?因为delete 命令其实只是把记录的位置,或者数据页标记为了"可复用",但磁盘文件的大小是不会变的.也可以认为是一种逻辑删除,所 ...
- 三:redis启动后的基础知识
Redis启动后的杂项基础知识 1.单进进程 单进程模型来处理客户端的请求.对读写等事件的响应是通过对epoll函数的包装来做到的.Redis的实际处理速度完全依靠主进程的执行效率 Epo ...
- Linux 升级内核开启 TCP BBR 有多大好处
前言 如果你有订阅一些科技新闻,应该会有看过内核在4.9当中加入了一个新的算法,来解决在有一定的丢包率的情况下的带宽稳定的问题,这个是谷歌为我们带来的干货,新的 TCP 拥塞控制算法 BBR (Bot ...
- java 打包压缩包下载文件
1. 下载压缩包zip方法 @Override public void downloadZip(HttpServletResponse servletResponse) { String nowTim ...
- 痞子衡嵌入式:JLink Script文件基础及其在IAR下调用方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是JLink Script文件基础及其在IAR下调用方法. JLink可以说是MCU开发者最熟悉的调试工具了,相比于其他调试器(比如DAP ...
- centos 6 系统下同步本地时间
1.date显示系统时间 [root@oldboy ~]# dateTue Mar 31 22:45:55 CST 2020 #CST是指是指某中标准时间 非东八区时间 更改时间的三种方法 1.c ...