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

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

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

  1. python爬虫基础项目教程_Python爬虫开发与项目实战_Python教程

    资源名称:Python爬虫开发与项目实战 内容简介: 随着大数据时代到来,网络信息量也变得更多更大,基于传统搜索引擎的局限性,网络爬虫应运而生,本书从基本的爬虫原理开始讲解,通过介绍Pthyon编程语 ...

  2. python根据品种散点图鸢尾花_python机器学习入门到精通--实战分析(三)

    利用sklearn分析鸢尾花 前面两篇文章提到了机器学习的入门的几个基础库及拓展练习,现在我们就对前面知识点进行汇总进行一个简单的机器学习应用,并构建模型. 练习即假定一名植物专家收集了每一朵鸢尾花的 ...

  3. python爬取b站评论_Python爬虫入门【19】: B站博人传评论数据抓取 scrapy

    1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的×××姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网 ...

  4. python爬b站评论_Python爬虫入门教程 32-100 B站博人传评论数据抓取 scrapy

    1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网址 ...

  5. python爬虫基础项目教程_Python爬虫入门项目

    Python是什么 Python是著名的"龟叔"Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. 创始人Guido van Ros ...

  6. python数据抓取课程_Python爬虫入门教程 21-100 网易云课堂课程数据抓取

    写在前面 今天咱们抓取一下网易云课堂的课程数据,这个网站的数据量并不是很大,我们只需要使用requests就可以快速的抓取到这部分数据了. 你第一步要做的是打开全部课程的地址,找出爬虫规律, 地址如下 ...

  7. python表情包斗图_Python爬虫入门教程 13-100 斗图啦表情包多线程爬取

    斗图啦表情包多线程爬取-写在前面 今天在CSDN博客,发现好多人写爬虫都在爬取一个叫做斗图啦的网站,里面很多表情包,然后瞅了瞅,各种实现方式都有,今天我给你实现一个多线程版本的.关键技术点 aioht ...

  8. python数据抓取课程_Python爬虫入门教程 22-100 CSDN学院课程数据抓取

    1. CSDN学院课程数据-写在前面 今天又要抓取一个网站了,选择恐惧症使得我不知道该拿谁下手,找来找去,算了,还是抓取CSDN学院吧,CSDN学院的网站为 https://edu.csdn.net/ ...

  9. python简单的爬虫教程中召唤小海龟_Python爬虫入门小练习之简单的50行(一)

    HI 最近得空,小看了一下python爬虫方面的资料,于是就打算把笔记和代码练习整理成文章分享给大家. 一.先来认识一下啥玩意叫爬虫吧 爬虫的目的:数据 1.企业内部数据 由企业内部服务器产生的数据 ...

最新文章

  1. 为了提升在小数据集上的性能,有学者让神经网络像生物一样“进化”了|CVPR2021 Oral...
  2. java newsize_JVM中的-Xms -Xmx -XX:newSize -XX:MaxnewSize -Xmn -XX:PermSize -XX:MaxPermSize区别介绍...
  3. 微信公众号,商城开发
  4. PHP SOCKET编程详解
  5. 计算机网络实验(华为eNSP模拟器)——第八章 动态主机配置协议(DHCP)
  6. 神经网络与深度学习——TensorFlow2.0实战(笔记)(四)(python模块、包和库)
  7. Zookeeper常用命令详解(Zookeeper3.6)
  8. 枚举求解:试把一个正整数n拆分为若干个(不少于2个)连续正整数之和。例如:n=15,有3种拆分:15=1+2+3+4+5,15=4+5+6,15=7+8。 对于给定的正整数n,求出所有符合这种拆分要求
  9. C#网络Socket编程
  10. 【a701】旅行家的预算
  11. 数据结构题集(c语言版)严蔚敏答案pdf
  12. 2020中国互联网十大人物
  13. U-Boot中ubi和ubifs命令的使用
  14. centos中设置邮件发送
  15. 产品经理入门攻略(3岁的PM成长分享)
  16. 《关键对话》思维导图
  17. 给定一个数组,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择某一天买入这只股票,并选择在未来的一个不同的日子卖出该股票。【LeetCode Hot 100】
  18. ROS基础(13)——机器人建模之运动仿真
  19. 运动控制器多工位位置比较输出在转盘式视觉筛选设备中的应用
  20. Mac 下设置隐藏文件可见

热门文章

  1. 447. Number of Boomerangs
  2. 递归判断一个数是否递增
  3. MFC多视图与重绘效率
  4. 计算机网络(十二)-信道划分介质访问控制-信道复用
  5. 怎么用python表白_如何正确使用Python进行表白?这是个值得思考的问题!
  6. python中set index_python中set基础应用
  7. 胶囊网络不同实现代码
  8. 数字图像处理--3.图像增强
  9. 爆款专栏《Python 黑科技》目录导航丨进度:12/50
  10. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 26丨餐馆营业额变化增长【难度中等】​