python博客项目评论_Python 爬虫入门——小项目实战(自动私信博客园某篇博客下的评论人,随机发送一条笑话,完整代码在博文最后)...

之前写的都是针对爬虫过程中遇到问题的解决方案,没怎么涉及到实际案例。这次,就以博客园为主题,写一个自动私信博客下的评论人员(在本篇留下的评论的同学也会被自动私信,如果不想被私信,同时又有问题,请私信我)。

1).确定监控的博客,这里以http://www.cnblogs.com/hearzeus/p/5226546.html为例,后面会更改为本篇博客的博客地址。

2).获取博客下的评论人员。

打开浏览器控制台-网络面板,可以看到如下信息:

分析可知,获取评论人员的请求为:

http://www.cnblogs.com/mvc/blog/GetComments.aspx?postId=5226546&blogApp=hearzeus&pageIndex=0&anchorCommentId=0&_=1456989055561

python代码如下:

defgetCommentsHtml(index):

url= "http://www.cnblogs.com/mvc/blog/GetComments.aspx"params={"postId":"5226546","blogApp":"hearzeus","pageIndex":`index`,'anchorCommentId':`0`,'_=':'1456908852216'}

url_params=urllib.urlencode(params)return json.loads(urllib2.urlopen(url,data=url_params).read())['commentsHtml']

可以通过index来遍历所有的评论人员。如果,评论人员只有1页,但是,我把index设为2,这个时候就取不到数据。分析有无数据的返回值,可以通过关键特征告诉爬虫,已经遍历结束了。我用的特征代码如下:

if(html.count(u"comment_date")<1):print "遍历结束:"+`i`

即提取返回值中是否有"comment_date"关键字来判断是否遍历结束

我们将这个链接,直接放在浏览器里面打开,可以看到请求结果,如下图所示:

放在json处理工具里面(http://www.bejson.com/jsonviewernew/),可以看到如下:

从图中可以看出,有效信息为commentsHtml 字段,同时可以发现,返回的用户列表形式为html,所以还要对返回值进行解析。

经过一步步的分析,我发现解析代码:

#parseHtml.py#encoding=utf8

from bs4 importBeautifulSoupdefparse(html):

soup= BeautifulSoup(html,"html.parser")

acount= len(soup.find_all("div","post"))

name_list=[]#print acount

for i inrange(acount):

name_list.append(soup.find_all("div","posthead")[i].find_all("a")[2].string)return name_list

3).保存用户名,以保证不重复给一个人发送私信。代码如下:

#FileOperation.py

#encoding=utf8

importsys

reload(sys)

sys.setdefaultencoding("utf-8")defcheckName(name):

file= open("../src/comments")

contents= file.read().split("\n")for i inrange(len(contents)):if(contents[i].count(name)>0):

file.close()returnTruedefwirteName(name):

file= open("../src/comments","a")

file.write(name+"\n")

file.close()return True

checkName函数,是用来检查该用户是否已经被发送过私信

writeName函数,是将发送私信成功后的用户写入文本

4).发送私信(这个接口可以自己在博客园发送私信截取到,方法同上),代码如下

#sendMessage.py

#encoding=utf8

importurllibimporturllib2defsend(name,content):

url= "http://msg.cnblogs.com/ajax/msg/send"header={"Cookie":"**********"}#print `name`

params ={"incept":name,"title":"脚本私信","content":`content`

}

url_param=urllib.urlencode(params)request= urllib2.Request(url=url,headers=header,data=url_param)print urllib2.urlopen(request).read()

a).其中header里面的cookie,需要登录博客园之后获取,如下图马赛克部分,

b).params通过名称可以看到每个参数的作用。

5).定时器

python定时器,代码示例:

importthreadingdefsayhello():print "hello world"t= threading.Timer(2.0, sayhello)

t.start()returnsayhello()

附录——完整代码

#spider.py#encoding=utf8

importurllib2importurllibimportjsonimportparseHtmlimportsendMessageimportFileOperationimportthreading

defgetCommentsHtml(index):

url= "http://www.cnblogs.com/mvc/blog/GetComments.aspx"params={"postId":"5226546",#不要监控我的"blogApp":"hearzeus",#不要监控我的"pageIndex":`index`,'anchorCommentId':`0`,'_=':'1456908852216'}

url_params=urllib.urlencode(params)return json.loads(urllib2.urlopen(url,data=url_params).read())['commentsHtml']defgetCommentsUser(html):returnparseHtml.parse(html)defsendHello(name):#for i in range(len(list_name)):

sendMessage.send(name,"脚本私信。如有打扰,还望海涵")#print("hello:"+name)

defmain():for i in range(10):

html=getCommentsHtml(i)if(html.count(u"comment_date")<1):print "遍历结束:"+`i`

t= threading.Timer(10.0, main)

t.start()returnlist_name=getCommentsUser(html)for i inrange(len(list_name)):if(FileOperation.checkName(list_name[i])!=True):

sendHello(list_name[i])

FileOperation.wirteName(list_name[i])

main()

其他三个py在上面都给出了

注意,

监控的博客页面一定要改,不要监控我的!!!!

监控的博客页面一定要改,不要监控我的!!!!

监控的博客页面一定要改,不要监控我的!!!!

我说了三遍!!!!!!

以上

a).代码仅供学习交流

b).如有错误,多多指教

c).转载请注明出处

2016/3/4 10:36最新更新

估计用不了多久,我就会被封了。

2016/3/4 10:42更新

有部分同学测试自动回复,这里更新下自动回复的代码:

#encoding=utf8

importurllibimporturllib2defsendLetter(name,content):#自动私信

url= "http://msg.cnblogs.com/ajax/msg/send"header={"Cookie":""}

params={"incept":name,"title":"脚本私信","content":content

}

url_param=urllib.urlencode(params)

request= urllib2.Request(url=url,headers=header,data=url_param)printurllib2.urlopen(request).read()defsendComments(parentid,contents):#自动回复

url= "http://www.cnblogs.com/mvc/PostComment/Add.aspx"header={"Cookie":""}

params={"blogApp":"hearzeus","postId":"5238867","body":contents,"parentCommentId":parentid

}

url_param=urllib.urlencode(params)printurl_param

request= urllib2.Request(url=url,headers=header,data=url_param)printurllib2.urlopen(request).read()

2016/3/4 11:01更新

已经被封

2016/3/4 11:34更新

自动回复过快也会失败,所以,就不打算部署了。

说在最后:

这篇博文只是一个简单的示例,理解就行。不用继续测试了,我已经在服务器关了这些功能

注意,Cookie 在sendMessage.py里面改成自己的

https://yunpan.cn/cYy5a9aJ3wLaW  提取码 f746

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA入门级教学之(猜数字测试)

一个类A有一个实例变量v&#xff0c;从键盘接受一个正整数作为实例变量v的初始值 另外再定义一个类B&#xff0c;对类A的实例变量v进行猜测 如果大了则提示大了 如果小了则提示小了 等于则提示测试成功 猜测数字比大小的测试&#xff1a; /*** author LBJ* version V1.0* P…

硬盘突然提示没有初始化_新硬盘的分区

★前言如果你添加了一个新硬盘到电脑上&#xff0c;但是它没有在文件管理器中出现&#xff0c;你可能需要为它分配一个盘符&#xff0c;或者对它进行初始化并分区才能使用。★警告在分区时&#xff0c;”删除磁盘分区“和”格式化“都会清空该分区的数据&#xff0c;请提前备份…

正高职称 程序员_正高级工程师评审条件最新版

.精选范本正高级工程师评审条件申报条件&#xff1a;学历资历条件具有大学本科以上学历&#xff0c;取得高级工程师资格后&#xff0c;从事本专业工作满5年。外语、计算机、继续教育条件(一)按照规定参加国家统一组织的职称外语和计算机应用能力考试&#xff0c;取得合格证&…

JAVA入门级教学之(简单的程序测试)

请定义一个交通工具(Vehicle)类 其中有属性&#xff1a; 速度speed 体积size 方法移动move() 设置速度setSpeed(int speed) 加速speedUp() 减速speedDown() 最后在测试类Vehicle中的main() 中实例化一个交通工具对象&#xff0c;并通过方法给它初始化speed&#xff0c…

linux怎样判断线程是否暂停_怎样判断股市是否会继续下跌?

之前和大家分享了如何判断大市是否会上涨&#xff0c;这篇文章我再分享下如何判断大市是否会继续下跌。我们对大市的判断原则仍采用&#xff1a;基于技术分析判断危险信号&#xff0c;结合市场消息坐实。基于上一篇文章的基础如何判断股市是否会上涨&#xff1f;是否已跌到底&a…

hfss螺旋平面_利用HFSS设计平面等角螺旋天线

- 73 -利用HFSS设计平面等角螺旋天线杜起飞北京理工大学电子工程系 100081摘要&#xff1a;本文介绍了一种双臂平面等角螺旋天线的设计过程&#xff0c;利用ANSOFT HFSS对其结构进行了建模和仿真&#xff0c;工作频率为0.4GHz&#xff5e;3GHz&#xff0c;电压驻波比VSWR<2.…

JAVA进阶教学之(源码及API文档概述)

1.JDK类库的根类&#xff1a;Object 这个从老祖宗类中的方法我们需要先研究一下&#xff0c;因为这些方法都是所有子类通用的。 任何一个类默认继承Object 就算没有直接继承&#xff0c;也会间接继承 2.Object类中有哪些常用的方法呢&#xff1f; 第一种&#xff1a;去源代码中…

达梦数据库删除用户_达梦数据库的操作手册.docx

达梦数据库操作手册2013年12月15日达梦数据库安装服务器安装数据库安装注意问题数据库的安装路径不要直接放在操作系统的/目录相同的磁盘上&#xff0c;可以安装在/dmdb/dm&#xff0c;但是/dmdb要单独挂载在一块硬盘上。根据业务需要及数据量&#xff0c;数据文件放在磁盘空间…

Java俄罗斯方块

游戏规则 由小方块组成的不同形状的板块陆续从屏幕上方落下来&#xff0c;玩家通过调整板块的位置和方向&#xff0c;使它们在屏幕底部拼出完整的一条或几条。这些完整的横条会随即消失&#xff0c;给新落下来的板块腾出空间&#xff0c;与此同时&#xff0c;玩家得到分数奖励…

html鼠标悬停效果_【开发小技巧】023—如何使用HTML和CSS实现3D文字效果

来源 | https://www.geeksforgeeks.org/create-a-3d-text-effect-using-html-and-css/3D文字效果是网页设计领域中最常用的文字效果之一。作为设计师或前端开发人员&#xff0c;应该知道如何创建3D文字效果。今天&#xff0c;我们将研究一种最简单易用的方法来实现3D文字外观。…

JAVA进阶教学之(Object类的toString方法)

1.toString public String toString() 返回对象的字符串表示形式。总的来说&#xff0c;这 toString方法返回一个字符串&#xff0c;“以文本方式表示”这个对象。其结果应该是一个简洁&#xff0c;但详实的代表性&#xff0c;是一个容易阅读的人。 建议所有子类都重写此方法…

etcd nginx 容器_Etcd+Confd实现Nginx配置文件自动管理

一、需求我们使用Nginx做七层负载均衡&#xff0c;后端是Tomcat。项目采用灰度发布方式&#xff0c;每次项目升级&#xff0c;都要手动先从Nginx下摘掉一组&#xff0c;然后再升级这组&#xff0c;当项目快速迭代时&#xff0c;手动做这些操作显然会增加部署时间&#xff0c;于…

java ftp获取文件名的方法_小猿圈Java学习-URL地址的组成格式

URL的全称是Uniform Resource Locator&#xff0c;意思是统一资源定位符&#xff0c;俗称网络地址或网址。网络上的每个文件及接口&#xff0c;都有对应的URL网址&#xff0c;它规定了其他设备如何通过一系列的路径找到自己&#xff0c;犹如网购的包裹一路送至收货地址所描述的…

ceph编译_Ceph编译安装教程

Ceph官方版本目前支持的纠删码很有限&#xff0c;实验室这块希望能够整合我们自主开发的纠删码BRS(Binary Reed–Solomon encoding)&#xff0c;所以需要编译Ceph环境。Ceph官方目前推荐的安装方式都是通过Ceph-deploy的工具来安装配置&#xff0c;搭建起来十分简单。目前直接通…

JAVA进阶教学之(Object类中的equals方法)

public boolean equals(Object obj){return (this obj); } 原始equals方法是判断两个对象的内存地址是否相等的&#xff08;内存地址相等&#xff0c;保存的值也相等&#xff09; 比较是判断两个对象的值是否相等&#xff08;保存的值相等&#xff09; 在Object类中的equal…

hashmap扩容机制_图文并茂:HashMap经典详解!

点击上方 Java后端&#xff0c;选择 设为星标优质文章&#xff0c;及时送达代码中的注解多看几遍&#xff0c;其中HashMap的扩容机制是要必懂知识&#xff01;结合图片一起理解&#xff01;什么是 HashMap?HashMap 是基于哈希表的 Map 接口的非同步实现。此实现提供所有可选的…

python使用高阶函数实现_18.python高阶函数

什么是高阶函数&#xff1a;一个函数可以作为参数传给另外一个函数(一个函数可以用来接收另一个函数作为参数)&#xff0c;或者一个函数的返回值为另外一个函数(若返回值为该函数本身&#xff0c;则为递归)&#xff0c;满足其一则为高阶函数。函数的形参位置必须接受一个函数对…

JAVA进阶教学之(Object类中的hashCode方法)

import java.util.Objects;/* hashCode方法 在Object中的hashCode方法是怎样的&#xff1f; public native int hashCode(); 这个方法不是抽象方法&#xff0c;带有native关键字&#xff0c;底层调用的是c程序hashCode() 方法返回的是int类型的哈希码 实际上就是一个java对象的…

nfc加密卡pm3和pm5区别_小米手环4/5 NFC添加加密门禁

什么是 NFC近场通信技术(Near-field communication&#xff0c;NFC)由非接触式射频识别(RFID)演变而来&#xff0c;由飞利浦半导体(现恩智浦半导体)、诺基亚和索尼共同于2004年研制开发&#xff0c;其基础是RFID及互连技术。近场通信是一种短距高频的无线电技术&#xff0c;在1…

JAVA进阶开发之(内部类概述)

匿名内部类&#xff08;相当于此类没有名字&#xff09;&#xff1a; 1.什么是内部类&#xff1a;在类的内部又定义了一个新的类 2.内部类的分类&#xff1a; 静态内部类&#xff1a;类似静态变量 实例内部类&#xff1a;类似实例变量 局部内部类&#xff1a;类似局部变量…