关于初学爬虫的几个误区

很多人刚学爬虫的时候就想写一些难度较大的爬虫,其实有些操之过急。在此,我认为应该先明白以下几点,再来研究爬虫才能更加水到渠成。


1、理解HTTP请求。
2、浏览器上所看见的页面基本上都是由js脚本处理过的数据,与程序所得到的数据有所偏差。
3、如何巧用谷歌浏览器的开发者工具进行调试。


1、理解HTTP请求:

HTTP请求是基于TCP/IP协议的应用层协议,请求方法常用的有GET、HEAD、POST。默认的请求方式为GET。所以一开始我们接触爬虫的时候会写上一段这样子的代码:

import requests
resp = requests.get('http://www.baidu.com')
其中就是使用了HTTP的GET请求。

这样一个小小的请求在这里之所以看似简单,是因为在requests库的背后已经将很多细节都帮封装好了。
GET用于信息获取,GET请求报文示例:

 GET /example?params=1 HTTP/1.1
 Host: www.example.com
 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
 Connection: Keep-Alive

可以看到第一行已经包括了请求方法,请求路径,协议的版本。
而其他行如Host、User-Agent、Connection等则表示请求时的一些条件:
Host 表示请求的域名
User-Agent 表示你所用的浏览器(这个在写爬虫时就可以伪造一番了)
Connection 表示要保持连接状态,及TCP/IP协议的连接状态
还有其他请求条件如Cookie,Referer等等这里不再一一列举,读者可自行百度。

不仅有GET请求,还有POST也很常用到。

POST请求一般用于提交数据较多,需要较强安全性的数据。使用场景一般是登陆,上传文件之类的操作。
POST请求的请求头和GET类似的,唯一比较不一样的是数据提交方式,比如登陆时要提交邮箱和密码:

GET请求的数据会附在URL之后,以?分割URL和传输数据,多个参数用&连接;例如:/login.php?email=123@qq.com&password=123

POST请求把提交的数据放置在是HTTP包的包体中。邮箱和密码就是实际的传输数据被封装在请求体中,因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变。

使用POST的代码可以如下:

import requests
data = {
    'email': '123@qq.com',
    'password': '123'
}
resp = requests.post('https://www.zhihu.com/login/email', data=data) # 简单事例,实际运用过程会更复杂

这样就把邮箱密码提交上去了。

除了请求头,还有HTTP的响应头,响应头会包含一些服务器的时间,类型,还有相应内容的长度等等。主要被用到的还是响应头中的状态码。状态码有以下几种类型:
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:

200 OK      #客户端请求成功
400 Bad Request  #客户端请求有语法错误,不能被服务器所理解
401 Unauthorized #请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
403 Forbidden  #服务器收到请求,但是拒绝提供服务
404 Not Found  #请求资源不存在,eg:输入了错误的URL
500 Internal Server Error #服务器发生不可预期的错误
503 Server Unavailable  #服务器当前不能处理客户端的请求,一段时间后可能恢复正常

这个状态码我们写程序的时候可以怎么利用呢?

import requests
resp = requests.get('http://www.baidu.com')
if resp.status_code == 200:
    print('响应成功!')

这个状态码可以判断我们在程序的请求是否正常响应,方便程序排除错误。
还有更多的响应信息,越是了解对写爬虫越是方便快捷

2、浏览器上所看见的页面基本上都是由js脚本处理过的数据,与程序所得到的数据有所偏差。

在谷歌浏览器中,右键有个检查选项可以定位查看到当前的html代码,很多人认为这也是我们程序中看到的html代码。
这也就导致了一些新手朋友在学习时常常碰壁,以为是自己的selector写错,其实主要原因还在于标题所述的那样,你所看到的代码一个被js处理过,另一个是服务器最初响应给我们的数据。
所以,如果想查看网页的最初的响应数据,可以右键查看源代码,这个源代码也是没有被js加工处理过的,这时就可以利用这个源代码进行调试写selector了。

3、如何巧用谷歌浏览器的开发者工具进行调试。

谷歌的开发者工具不仅是适用开发人员,而且对我们写爬虫也非常有益处。
按F12可以快速打开开发者工具,可以看到有Elements、Console、Sources、Network等等。
其中Elements里面就是js加工处理过的代码,我们可以利用它来查找我们所要的标签中是否有价值的class或者id,如果有的话可以很快写出selector。
Sources里存着网页中如js,css大大小小的文件等等。
Network在抓取异步请求的数据时非常好用,Network中会包含很多异步请求,一般我们在刚打开的时候是空的,这时刷新一下就会看到很多请求,里面还可以看到请求头、响应头等的信息,非常方便。

文章链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,451评论 25 707
  • AJAX 原生js操作ajax 1.创建XMLHttpRequest对象 var xhr = new XMLHtt...
    碧玉含香阅读 3,170评论 0 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • 不问苍茫 ~~~~~ 金戈铁马 笑卧沙场 壮士断腕 何言离殇? ~~~~~~ 凭东江思赤壁 眺嘉峪忆秦皇 千古英雄...
    8bee4f182ce0阅读 162评论 1 0
  • 回首人生路,在人生的旅途中有阳光、也有风雨雷电;有平坦的道路、也有荆棘坎途;走过,经历过了,回首再看,虽然苦过、累...
    曾经_9128阅读 136评论 0 0