本篇博客主要用于学习交流,用来记录自己学习过程中遇到的问题,所获得的感想,同时也为了方便以后的查找与回顾。另外也为了向各位前辈学习,纠正自己思考上的不足。文中可能会引用其他前辈的博客,文末会给出相应链接,侵删!
前言
自己一直想了解一些爬虫的知识及进行应用,从 上学习了一些前辈们的爬虫方法,用Python 3.6实现了简单的应用,爬取了百度翻译、有道翻译、谷歌翻译的页面。
1、爬虫定义
络爬虫(又被称为Web Spider),是一种按照一定的规则,自动地抓取万维 信息的程序或者脚本。另外一些不常使用的名字,比如蚂蚁、自动索引、模拟程序或者蠕虫。如果把互联 比喻成一个蜘蛛 ,Spider就是一只在 上爬来爬去的蜘蛛。 络爬虫就是根据 页的地址(即URL)来寻找 页的。
URL,即统一资源定位符。在WWW上,每一个信息资源都有一个统一且唯一的地址,该地址就叫URL(Uniform Resource Locator),它是WWW的统一资源定位标志,也就是指 络地址。
URL的一般格式为: protocol :// hostname[:port] / path / [;parameters][ery]#fragment
(1)protocol(协议)
指定使用的传输协议。 最常用的是HTTP协议,它也是目前WWW中应用最广的协议。
(2)hostname:主机名。
是指存放资源的服务器域名系统(DNS)的主机名或 IP 地址。有时,在主机名前也可以包含连接到服务器所需的用户名和密码(格式:username:password@hostname)。
(3)port(端口 )
整数,是可选项,省略时使用协议的默认端口。各种传输协议都有默认的端口 ,如http的默认端口为80。有时候出于安全或其他考虑,可以在服务器上对端口进行重定义,即采用非标准端口 ,此时,URL中就不能省略端口 这一项。
(4)path(路径)
由零或多个“/”符 隔开的字符串,一般用来表示主机上的一个目录或文件地址。 络爬虫就是根据这个URL来获取 页信息的。
(5)parameters(参数)
这是用于指定特殊参数的可选项。
(6)query(查询)
可选,用于给动态 页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的 页)传递参数。当有多个参数时,用“&”符 隔开,每个参数的名和值用“=”符 隔开。
(7)fragment(信息片断)
字符串,用于指定 络资源中的片断。例如一个 页中有多个名词解释,可使用fragment直接定位到某一名词解释。
2、爬取简单页面
运行平台:Windows
Python版本:Python3.6
IDE:PyCharm
2.1 爬取百度翻译
我们用urllib库进行爬取页面。urllib库是python内置的,无需我们额外安装,只要安装了Python就可以使用这个库,但request库是第三方库,需要我们自己安装,可以使用pip安装。
urllib使用使用request.urlopen()打开和读取url相关信息,返回的对象response就像一个文本对象,我们可以调用read(),进行读取,再通过print(),将读取的信息打印出来。但此时我们得到的都是二进制码,需要对其进行解码。解码时,需要首先知道该页面使用的是那种编码方式。有两种方式可以查看。
- 在该页面上点击右键,点击检查元素,在…中找到 meta charset ,后面的值就是该页面使用的编码方式。如图所示。
我们可以看到,该页面的编码方式是utf-8.
2. 另一种方式是使用代码的方式,自动检测该页面的编码方式,即使用chardet.detect()的方式进行检测。
当我们得到二进制码以及知道了编码方式之后,我们就可以对其进行解码,转化成我们熟悉的HTML语言。
爬取之后得到百度翻译 页的内容:
2.2 爬取有道翻译
相对的,我们也可以爬取有道翻译的页面,只不过换一下 址。
显示爬取的有道翻译
2.3 爬取谷歌翻译
另外,我们也可以爬取谷歌翻译。但爬取谷歌翻译时,如果还是按照上面的方法,会遇到问题。会显示urllib.error.HTTPError: HTTP Error 403: Forbidden 的错误。
之所以出现上面的异常,是因为如果用 urllib.request.urlopen 方式打开一个URL,服务器端只会收到一个单纯的对于该页面访问的请求,但是服务器并不知道发送这个请求使用的浏览器、操作系统、硬件平台等信息,而缺失这些信息的请求,往往都是非正常的用户访问,例如爬虫。
有些 站为了防止这种非正常的访问,会验证请求信息中的UserAgent(它的信息包括硬件平台、系统软件、应用软件和用户个人偏好),如果UserAgent存在异常或者不存在,那么这次请求将会被拒绝(如上错误信息所示),解决这个问题,可以尝试在请求中加入UserAgent的信息。修改后的代码如下。
爬取谷歌翻译结果
3、总结
这次爬取了三个比较常用的翻译页面的代码,页面比较简单,也容易分析。通过此次爬取,对如何获取URL中的信息有了一定了解,对爬取的过程有了初步认识。
4、参考资料
- Python3 络爬虫(一):利用urllib进行简单的 页抓取
-
Python 3.x 中”HTTP Error 403: Forbidden”问题的解决方案
世界和我爱着你!
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树 络爬虫urllib211385 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!