回复爬虫来获取本篇文章的源代码。
在上一篇文章中,我们学习了爬取一些简单的网页。当然,有爬虫就有反爬虫。像第一篇文章中,我们试图爬取百度主页就只得到了一点信息。今天我们来学习绕过一些简单的反爬虫机制。
首先我们了解一下你是怎么上网的。
首先,你会输入一个网址让浏览器访问。网址其实本身是没有任何意义的,只是为了让人们更好记忆,浏览器也并不对网址感兴趣,它只会根据IP地址来访问网页。
浏览器会在你访问过的网页中寻找网址对应的IP地址,如果没有找到,就是说你没有访问过这个网页的话,它就去询问DNS。DNS的全称是域名服务器,是专门用于管理网址对应的IP地址的。它类似于接线员,把浏览器接到IP地址对应的计算机。(服务器。其实服务器就是配置比普通计算机高的计算机)当然,如果你访问的界面根本就不存在,DNS就返回一个Http404错误,它在你访问不存在的网页时出现。接着,浏览器会给服务器发一个东西,叫做Http响应报文,用于请求你访问这个网页。这里面大概是这样的:
你可以在检查元素中的网络部分找到它。
如果服务器同意你访问,你就可以开始访问这个网页了。
当然,有时候也会这样:
这种问题可能是由于服务器已经崩溃了,从而没有人允许你访问这个网页。(在Django网页的开发过程中就经常遇到,多半是你写的代码出问题了)
我们回到整篇文章的主题:“爬虫”。问题是,爬虫给网页发送包的时候很可能没有发送完整。这不是你代码写的问题,而是你并没有让它发送。这个时候就只能祈祷这个网页的反爬虫机制不完善吗?不是的。你可以手动给它传包的内容。今天我们说User Agent,就是用户代理。
这个东西是你的浏览器本来就有的,里面是关于浏览器以及你计算机的一些信息。有两种方式获取这个,一个是使用Google浏览器有一个显示版本的网页,里面就有。一种是使用检查元素。
我们随便使用浏览器打开一个网页,例如百度首页。
F12检查元素。
或许你的不是这样的,不过没关系。
我们根据它说的按下Ctrl+R键开始。
好多啊。这里大多是一些图片,是由服务器传给浏览器的。
里面有General、Response Headers以及Request Header和Query String Parameters。我们看Requests Headers,也就是请求头。
注意最后一行User-Agent,里面就是用户代理。我们打开PyCharm,把它复制进去。
这是谷歌浏览器根据你的计算机自动生成的。我们将它储存在一个名为headers的变量中,然后再使用。
在此之前,由于百度贴吧没有反爬机制,我们使用百度首页试一试。也就是说我们重新开始。在小爬虫目录下新建version2.0,这是我们第二个版本。
今天我们使用另一个用于Python爬虫的Python库,叫做requests。它并不是自带的,所以我们首先要使用pip来安装它。打开一个终端窗口,输入pip install requests
这是我已经安装完了的样子。这个Python库的语法和urllib差不多,是这个样子的。
这是我们source函数,我们并没有加入User Agent。先使用百度贴吧测试一下。
运行。
还是可以的。但如果是有反爬机制的百度主页呢?
一个主页的源代码不可能只有这么一点。我们加入User Agent试试。
注意这里的User Agent应该是字典类型而不是字符串。
运行。
太好了!我们使用User Agent成功抓取到了百度首页的源代码。接下来,我们就可以分析一些反爬虫机制比较弱的网页了。
你学会了吗?