学习爬虫的第47天 我学会了伪装 欺骗了豆瓣
获取User-Agent
之前在第41天学习的时候,接触了 requests 模块中的 status 方法,就是获取返回状态的意思。。
当时访问 www.baidu.com,返回的是 200。
在 urllib 也有 status 方法,效果是一样的。
但是如果访问 豆瓣,返回的却是 418 错误,也就是说触发了网站的反爬机制。
那么,怎么让网站认为我们是一个真实的人,是用浏览器在访问网站呢?
还记得昨天提过的User-Agent嘛?
浏览网页时,找到我们自己的User-Agent就可以了。
在 chrome 浏览器打开网页(比如www.baidu.com),按 F12 。
刷新下网站后,点 Network,点红色圆点停止进程,再点显示进度条那个地方。
就可以看到下面 name 栏的地方,显示 www.baidu.com ,再点击它。
看到右面的 Headers,拉到最下面就找到 User-Agent 辣!
选中它、复制,粘入 headers 。
跟着老师一通半懵逼状态的操作,最后总算是结果还比较满意,成功输出了信息。
也就是,让对方服务器理解,我们这头确实是真人访问的。
而这段代码中,parse、urlencode、Request 这些东东都是干啥用的?什么时候用?老师基本上是一笔带过,没怎么提。
哎,这就是我以前说的,太内行了,有些知识他感觉理所应当会的,或者,也没准他觉得这东东没啥可讲的,用熟了就明白了吧。
那么,用这种办法,访问豆瓣可以吗?
一样也是没有问题的,这里直接把 data 删除了,相当于把上面我提出的问题,用一个简单粗暴的方法给解决了。
看下面的执行结果,有登录豆瓣等各种文字,也就是说,事实上,豆瓣的服务器认为我们是个真实的人,已经允许我们进入他的首页了。
这下子,算是终于把 urllib 模块简单讲解完了。
爬取1个网页
下面进入正题,开始爬取一个豆瓣电影top250的网页。
回到主文件 spider.py。
在爬取网页环节,定义一个函数 askURL。
然后定义头部信息,按照之前的方法,从浏览器里复制过来 User-Agent。
再后面使用 try... excepy... 设置一些需要排除的情况,最后在主函数里面调用即可。
然后运行一下,蹊跷的事情发生了。
我这头运行成功,完全就是正常访问的样子,而老师那里却显示的是418错误。
这里原来是有个注意事项的,那就是将 User-Agent 复制过来的时候,一定不能有空格。
如果有空格的话,服务器也是很敏感的,一样是可以识别出来的。
最后加上一个 return ,将结果返回。
爬取10个网页
一个网页能爬取了,后面的想要都爬取,那就要循环语句上场了。
记得前面的分析是一共10页,每页25条记录,所以循环的范围定为0--9页。
现在都爬取完了,这应该算是初级任务完成,下面解析网页要怎么搞呢?
还真是有点小期待辣。