谷歌抓取网页视频教程(Python爬虫的网上搜索一下笔记)

优采云 发布时间: 2021-10-05 14:22

  谷歌抓取网页视频教程(Python爬虫的网上搜索一下笔记)

  一直想学习Python爬虫的知识,在网上搜了一下,大部分都是基于Python2.x。所以打算写一篇Python3.x的爬虫笔记,供后续复习。欢迎交流,共同进步。

  一、预备知识

  1.Python3.x基础知识学习:

  您可以通过以下方式学习:

  (1)廖雪峰Python3教程(文档):

  网址:

  (2)菜鸟教程Python3教程(文档):

  网址:

  (3) Fish C Studio Python 教程(视频):

  小龟老师人很好,讲课风格幽默诙谐。如果时间充裕,可以考虑看视频。

  网址:

  2.开发环境设置:

  Sublime text3搭建Pyhthon IDE,可以查看博客:

  网址:

  网址:

  二、网络爬虫的定义

  网络爬虫也称为网络蜘蛛。如果将 Internet 比作蜘蛛网,那么蜘蛛就是在网上爬行的蜘蛛。网络爬虫根据网页的地址,即 URL 搜索网页。举个简单的例子,我们在浏览器地址栏中输入的字符串就是URL,例如:

  URL是Uniform Resource Locator,其一般格式如下(方括号[]是可选的):

  协议://主机名[:端口]/路径/[;参数][?查询]#fragment

  URL格式由三部分组成:

  (1)protocol:第一部分是协议,比如百度使用的是https协议;

  (2)hostname[:port]:第二部分为主机名(端口号为可选参数)。一般网站的默认端口号为80。例如host百度的名字是这个是服务器的地址;

  (3)path:第三部分是宿主机资源的具体地址,如目录、文件名等。

  网络爬虫根据这个 URL 获取网页信息。

  三、简单爬虫示例

  在 Python3.x 中,我们可以使用 urlib 组件来抓取网页。urllib 是一个 URL 处理包。这个包收录一些处理 URL 的模块,如下:

  

  1.urllib.request 模块用于打开和读取 URL;

  2.urllib.error 模块中收录了 urllib.request 产生的一些错误,可以通过 try 捕获和处理;

  3.urllib.parse 模块收录了一些解析 URL 的方法;

  4.urllib.robotparser 模块用于解析 robots.txt 文本文件。它提供了一个单独的RobotFileParser类,可以通过该类提供的can_fetch()方法来测试爬虫是否可以下载一个页面。

  我们可以使用接口函数urllib.request.urlopen()轻松打开一个网站,读取和打印信息。

  

  urlopen 有一些可选参数。具体信息请参考Python自带的文档。

  知道了这一点,我们就可以写出最简单的程序了,文件名是urllib_test01.py,感受一下一个urllib库的魅力:

  # -*- coding: UTF-8 -*-

from urllib import request

if __name__ == "__main__":

response = request.urlopen("http://fanyi.baidu.com")

html = response.read()

print(html)

  urllib 使用 request.urlopen() 打开和读取 URLs 信息,返回的对象 response 就像一个文本对象,我们可以调用 read() 来读取它。然后使用print()将读取到的信息打印出来。

  运行程序ctrl+b,可以在Sublime中查看结果,如下:

  

  您也可以在 cmd(控制台)中输入命令:

  python urllib_test01.py

  运行py文件,输出信息相同,如下:

  

  其实这是浏览器接收到的信息,但是我们在使用浏览器的时候,浏览器已经把这些信息转换成界面信息供我们浏览了。当然,我们也可以从浏览器中查看这些代码。比如使用谷歌浏览器,在任意界面右击选择Check,即勾选元素(不是所有页面都可以勾选元素,比如起点中文网站的付费版块。)。以百度界面为例。截图如下:

  

  如您所见,我们的审核结果在右侧。我们可以在本地更改元素,即浏览器(客户端),但这不会上传到服务器。例如,我可以修改我的支付宝余额并安装一个包,例如:

  

  我真的有钱吗?显然,如果我被迫这样做,我就没有钱了。我刚刚修改了关于review元素的信息。

  有一些偏差,但事实是浏览器作为客户端从服务器获取信息,然后解析信息,然后显示给我们。

  回到正题,虽然我们成功获取到了信息,但很明显,都是二进制乱码,看起来很不方便。我们该怎么办?

  我们可以通过一个简单的 decode() 命令来解码网页的信息并显示出来。我们新建一个文件,命名为urllib_test02.py,编写如下代码(或以百度翻译网站为例):

  # -*- coding: UTF-8 -*-

from urllib import request

if __name__ == "__main__":

response = request.urlopen("http://www.fanyi.baidu.com/")

html = response.read()

html = html.decode("utf-8")

print(html)

  这样,我们就可以得到这个结果。显然,解码后的信息看起来更整洁、更舒服:

  

  当然,前提是我们已经知道这个网页是utf-8编码的,如何查看网页的编码方式呢?需要人工操作,一个很简单的方法就是使用浏览器查看元素。只需要找到head标签开头的chareset就知道网页使用的是哪种编码。如下:

  

  所以我们知道这个网站的编码方式,但这需要我们每次打开浏览器,找到编码方式。显然,这有点麻烦。用几行代码来解决,更省事,更爽。

  四、自动获取网页编码方式的方法

  获取网页代码的方法有很多,我更喜欢使用第三方库。

  首先我们需要安装第三方库chardet,它是一个用来判断编码的模块。安装方法如下图所示。只需输入命令:

  pip install chardet

  

  安装后,我们可以使用chardet.detect()方法来判断网页的编码。此时,我们可以编写一个小程序来确定网页的编码方式,新建文件名为chardet_test01.py:

  # -*- coding: UTF-8 -*-

from urllib import request

import chardet

if __name__ == "__main__":

response = request.urlopen("http://fanyi.baidu.com/")

html = response.read()

charset = chardet.detect(html)

print(charset)

  运行程序,查看输出结果如下:

  

  看,返回的是字典,所以我们知道了网页的编码方式,我们可以根据得到的信息使用不同的解码方式。

  PS:关于编码方式的内容,可以自行百度,或者阅读这篇博客:

  网址:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线