本文讲述了如何使用代码模拟HTTP请求来实现数据爬取、点赞、评论回复等功能。

内容包括:

1.抓包软件WireShark的简单使用方法

2.Python库requests的基本使用

3.一个用代码回复博客的例子

一、思路阐述

首先,要模拟HTTP请求,我们要知道被模拟的真实HTTP它到底包含了哪些东西。它的目标URL是什么,参数是什么,是不是带cookie?除此之外还包括了哪些(比如Header)

为了获取这些信息,我们可以使用抓包软件WireShark来捕获我们真实提交请求时的数据

这里解释一下为什么要用WireShark?(Chrome浏览器本身其实也自带类似功能,有兴趣的朋友可以去研究下,但是我还是觉得抓包软件牛逼)

你可能觉得我要模拟HTTP请求来提交表单,只要看下网页源代码中的form表单有哪些字段就可以了。

没错,对于一些耿直的安全防护水平低的网站来说,这个方法确实可行。但对于大多数网站是行不通的

拿某博客网站做例子,看到它源代码中有个表单域如下:

然而我开着抓包软件,在真实地完成一次评论操作后,获取到的POST请求是这样的:

当然,这可能是因为它的onsubmit中修改了参数名字。但是就算是你正确填写了参数名,可能也没法获得正确的结果。其中缘由,下文的例子会具体阐述。

通过抓包软件,我们获取到了真实的HTTP请求的内容(上面红字所提到的)。接下来就可以通过代码来模拟。当然,在模拟时肯定会碰到各种问题,这时候我们要做的就是比较模拟的包(即代码发送的包。你看,不用抓包软件你怎么去获取代码发送的请求?)和真实请求的包的内容,来完善代码(比如添加一些cookie、header等等)。

本文我使用Python来编写,用了它强大的requests 库来模拟。

OK,到这里大致思路已经清楚了:使用抓包软件获取真实HTTP请求的内容,并用python代码来模拟。接下来我们看一下怎么去使用WireShark获取我们需要的信息。

二、用抓包软件抓到我们想要的包

打开WireShark,看到主界面如下:

这时候选择一个正在使用的网络连接之后Start(开始抓包),然后出现如下的界面:

在这里我们看到各种各样的包,一会儿就把整个屏给刷满了。别急,我们给它做点过滤。

在Filter输入栏中输入过滤规则:  ip.dst==116.213.120.41 and http.request.method=="POST"

解释一下:目标IP地址为116.... 以及 包内容为:   以POST方法提交的HTTP请求(关于过滤规则网上查一下比比皆是)

现在清爽多了是不是:

这里显示的是我真实登录慕课网所post的请求的内容。可以看到URL、提交的内容以及一些乱七八糟的信息。

有同学可能不清楚怎么获得慕课的IP:打开终端Ping一下慕课的网址就可以了,如下所示:

OK,到这里想必读者已经清楚如何利用WireShark来获取真实请求的包了。有了包的数据,接下来就要用代码来模拟了!

三、用代码来爬取数据、提交请求

本来想拿新浪博客做例子的。抓了下包看了内容吓哭了。也忒多了。还是拿某博客为例吧。

首先给个链接看看回复博客的效果:

http://blog.csdn.net/u012422829/article/details/46491779   这篇博客里抽风一样的评论有的是我之前做测试的时候真实提交的,有的是用代码提交的。

然后直接上代码:

[python] view plaincopy

  1. import requests

  2. from bs4 import BeautifulSoup

  3. # coding="utf-8"

  4. url = 'https://passport.csdn.net/account/login'

  5. sess = requests.session()

  6. print sess

  7. html1 = sess.get(url).text

  8. soup1 = BeautifulSoup(html1)

  9. p1 = soup1.select("[name=lt]")[0]["value"]

  10. p2 = soup1.select("[name=execution]")[0]["value"]

  11. data = {

  12. "lt": p1,

  13. "execution": p2,

  14. "_eventId": "submit",

  15. "username": "your name",

  16. "password": "your psw"

  17. }

  18. r = sess.post(url, data)

  19. print r.text

  20. #below is the code how to reply your blog

  21. commentUrl="http://blog.csdn.net/u012422829/comment/submit?id=46491779"

  22. html2 = sess.get(url).text

  23. commentdata = {

  24. "commentid":'',

  25. "content":"I am excited that I can reply my blog by my python code!",

  26. "replyId":'',

  27. }

  28. headers = {'content-type': 'application/x-www-form-urlencoded',

  29. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}

  30. sess.headers.update(headers)

  31. r2 = sess.post(commentUrl, commentdata)

  32. print r2.text

  33. #below is the code how to crawl the info  you want

  34. msg = BeautifulSoup(sess.get('http://msg.csdn.net/').text)

  35. for li in msg.select(".user_name"):

  36. print li.text

  37. #below is the code how to up your blog in the home page of CSDN

  38. url3='http://blog.csdn.net/common/digg.html?id=46541445&blog=1248879&user=u012422829&action=up'

  39. msg = BeautifulSoup(sess.get(url3).text)

  40. print msg

关于登录代码的解释:

使用了Python强大的requests库来完成。有关这个库用法的介绍网上很多,读者可以自己去找找。

我先用抓包软件获取到了包的内容,确认了发送的表单内容之后,发现有3个隐藏域,于是直接从网站返回消息中获取。

一开始没有添加Header,发送的请求被拒绝处理(403Forbidden)。观察了两个包的内容,猜想可能是Header中User-Agent为Python脚本的原因,于是顺手把真实请求的Header复制下来,替换了User-Agent之后,成功登录。

看看爬下来的msg的输出:

可以看到我把所有消息的来源者的name爬下来了。

============写在后面====================================

爬其他网站数据也大同小异,不过很多都有反爬虫机制。比如刚刚试验知乎登录,一开始还可以,后来就被验证码弄的405ERR了,忧伤。

任何问题欢迎留言!

转载于:https://blog.51cto.com/hyman1994/1663677

程序员的黑科技_用代码回复博客相关推荐

  1. 黑马程序员——收集起来的ios笔试题——黑马 ios 技术博客

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 面试能力要求:精通iphone的UI开发,能熟练操作复杂表视图,熟练使用图层技术, 可以自定义U ...

  2. 浅谈程序员的英语学习 - 风口上的猪 - 博客园

    作为在中国工作的程序员,不懂得英语似乎也不妨碍找到好工作,升职加薪.但程序员这个工种则稍有不同,因为程序,尤其是高级语言,基本上都是由英语和数字表达式构成的.英语对于程序员十分重要.我的大学本科全部采 ...

  3. C# ASP.NET程序员整合Java门户单点登录PHPwind论坛博客软件集成项目经验总结

    为什么80%的码农都做不了架构师?>>>    有人曾问,如何正确估算项目周期?你是天天写C#程序的程序员,若做了一个 PHPwind 的单点登录,那估计需要几天时间? 客户只提了一 ...

  4. java代码画樱花飘落_一行代码引入博客园樱花飘落特效

    前言 博客园作为面向大众的博客, 个性新颖可以博得一赞, 简约美观也不失阅读体验, 本文对樱花特效js进行了解读, 发现作者的设计确实秒不可言, 即使没有注释, 思路展示的也很清晰. 那就废话不多说, ...

  5. 程序员副业之如何利用空余时间从博客中赚钱?

    目前,互联网是世界上最大的市场.毫不奇怪,这是因为每天有大量人登录互联网.在过去的十年里,互联网用户几乎翻了一番,因为大多数人现在在网上创业,而其他人则使用互联网进行学习和信息共享.在本文中,您将学习 ...

  6. java开发有不加班的吗_千万不要相信程序员在加班时间写的代码!

    作为一个最底层的程序员,我先记录一些只有底层程序员才会知道的事情.如果多年后,我违背自己进入这个行业的初心,走上管理岗位,也能回想起一些禁忌,避免一些错误. 其中最重要的就是这条:不要相信一个程序员在 ...

  7. python制作表白神器_程序员的七夕用30行代码让Python化身表白神器

    转眼又到了咱们中国传统的情人节七夕了,今天笔者就带大家来领略一下用Python表白的方式.让程序员的恋人们感受一下IT人的浪漫. 一.词云制作 首先咱们可以用之前介绍过的wordcould包制作词云. ...

  8. 程序员的浪漫:三十行代码实现用她的名字作幅画

    程序员的浪漫:三十行代码实现用她的名字作幅画 hello,各位小伙伴们大家好,看这篇文章的有很多新的朋友,有估计有不少的老朋友,首先做个自我介绍,我是一灰灰,码农界的资深搬运工:今天呢,没有站在我身边 ...

  9. “穷X”事件程序员致歉:以后老实写代码,正紧写注释

    (点击上方公众号,可快速关注) 转自:新浪科技 tech.sina.com.cn/i/2017-11-20/doc-ifynwnty5776053.shtml 新浪科技讯  19日晚间,技术论坛出现了 ...

最新文章

  1. 少侠,找个千手观音来帮你营销可好?
  2. java 互斥量_什么是Java中的互斥和信号量?主要区别是什么?
  3. Safari下弹窗问题的解决办法
  4. 使用BigQuery分析GitHub上的C#代码
  5. DOM编程练习(慕课网题目)
  6. 李善兰如何用汉字写公式 | 晚清高数课本长什么样?
  7. linux红黑树节点没有数据,真正理解红黑树,真正的(Linux内核里大量用到的数据 -电脑资料...
  8. 组织JSON数据、JSON转换
  9. flutter text 自动换行_Flutter 系列博客——05 StatelessWidget vs StatefulWidget
  10. 教程-Delphi资源文件(全面分析于使用)
  11. ecplise里的run as里只有run configurations是怎么回事?
  12. python黑网站充值_Python黑帽子:Windows系统提权
  13. 春运12306购票指南
  14. html左侧浮动广告代码,Html+CSS浮动的广告条实现分解
  15. 法院裁定抖音违规共享用户信息 多闪被勒令删头像、昵称
  16. java http 传输二进制流_字符流、字节流、二进制及其在HTTP协议传输
  17. 倪海厦天纪笔记16_倪海厦《天纪·天机道》笔记
  18. Matlab与Access数据库编程指南
  19. C语言项目案例分析 源代码
  20. 名风新浪博客评论软件-自动评论推广

热门文章

  1. 用 document.readyState == complete 判断页面是否加载完成。
  2. MFC初探 —— Editcontrol实现多行显示
  3. Netty工作笔记0078---Netty其他常用编解码器
  4. c++工作笔记001---c++相关零碎要点_endl、“\n”和‘\n’区别_extern int a关键字_-的意思_::的意思_指针和引用的区别
  5. sytlengan2 代码解析
  6. C语言 输入的注意事项 EOF的应用
  7. OpenGL绘制旋转茶壶
  8. C++类成员属性的一种简洁实现
  9. 天龙八部手游有网络显示网络或服务器异常,天龙八部手游微信登录不了_微信登录异常解决办法_玩游戏网...
  10. C语言和设计模式(桥接模式)