首先打开我们创建的第一个python文件。在文件的开头我们首先导入依赖。输入
这里我们爬取的是百度的源代码。我们使用一个变量response来接收我们爬取的结果,然后将结果打印出来。
右键鼠标,选择Run
就可以运行了!
输出的结果如下:可以看到就是百度网页的源代码。
出现的问题
其实上面演示的就是一个最简单的爬虫了,但是不是所有网页我们都可以这么爬取的。因为很多网站设置了反爬虫,不想让我们去直接爬取他们的数据,比如我们把刚才代码中的网址换成豆瓣的电影栏目https://movie.douban.com
,然后试试输出的结果。
可以看到结果报错了,我们关注的就是下面的HTTP Error 418
,这代表网站已经发现我们是爬虫了,不允许我们进行数据的爬取。所谓魔高一尺道高一丈,我们也有方法去应对418这种情况。
解决被识别的问题
既然我们被识别出来是爬虫了,我们就可以通过伪装成服务器请求的方式去获取网站的数据,这样就不会被发现啦。这里我们要补充一些关于浏览器的知识。接下来的知识有些硬核,可能有些难懂,做好准备哦。
知识补充
- 首先是使用Chrome浏览器,在地址栏输入
movie.douban.com/top250?start=0
,打开豆瓣电影前250名 - 按下
F12
进入开发者模式。得到如下图所示:可以看到,在Element栏下显示的就是网站的源代码。实际上的网站就是由这些代码写出来的,网页中的字、图片等都可以在源代码中找到它的位置。比如,我们要看肖申克的救赎这部电影在源代码中的位置,就可以点击源代码栏左上角的鼠标那里(下图中蓝色的地方),然后鼠标指向我们当前网页中肖申克的救赎的位置。然后你就可以发现,源代码自动跳转到了这个电影名称所在源代码的位置。
这个小tips的作用在于我们以后爬取网页时,常常需要解析网页的结构,从源代码中获取我们想要的数据。而通过这个方式可以轻易地帮助我们找到想要的数据在源代码中的位置。
- 接下来点击源代码栏中的
Network
,你可以看到许多条线吧?然后这时候刷新网页(网页地址栏左边的按钮就是哦),然后再点击源代码栏中红色的圈圈按钮。点击线条开始的部分,得到下图所示。 -
- 这时点击Name下的
top250?start=0
,就会得到下图所示:
- 这时点击Name下的
top250?start=0
,就会得到下图所示:
这是什么?!好像比前面的网页源代码好理解些唉,都是英文单词标识的属性,后面就是对应的内容。我来解释下这里是什么吧!
在Name栏的右侧你可以发现Headers一栏,这里就是我们使用Chrome浏览器向网站的服务器发出请求的数据,换句话说,Headers就是我们访问豆瓣网站时,告诉豆瓣的服务器我们所需要的数据。
在General模块中:
- Request URL:表示的是我们当前网站的地址,也就是最开始输入的网址
- Request Method:是我们请求的方法,这里使用的是GET。请求的方法一共有五种,分别是GET,POST,PATCH,DELETE和UPDATE。
- Status Code:是状态码,表示我们请求的状态。常用的状态码有200(成功),404(网站不存在),500(网关错误)等。
- 下面的Referrer Policy我们暂时不需要了解。
向下继续看Response Headers,这里是服务器发送给我们的响应的东西,目前对我们用处不大。
继续滚动到Request Headers,这里是我们向服务器请求时发出的东西:
这里的东西有什么用?这里就是我们爬虫时候模仿浏览器向服务器发送请求的关键!
- Cookie:这个是一种网站追踪用户信息的一种标识,就好像我们在雪地里走会留下脚印一样。
- Host:主机的位置,我们爬虫时候用不上
- User-Agent:用户代理,这个是我们模仿的关键。我们爬虫的时候使用这个东西,就可以模仿浏览器去请求数据啦!
伪装后我们再战
现在我们学会了伪装的方法,接下来就在爬虫代码中使用伪装去请求数据!