点击蓝色字免费订阅,每天收到这样的好信息

前言:最近有不少粉丝关注本公众号。并且我已经成功开通了流量主同时会赚一点点广告费,我打算每个月把这部分钱拿出来给大家买点书刊,算是给大家一点福利吧。大家想买什么书扫描下方的加他拉你加群。最后,非常感谢大家的关注。

运行平台:WindowsPython版本:Python3.xIDE:Sublime text3

转载请注明作者和出处:http://blog.csdn.net/c406495762/article/details/58716886

一直想学习Python爬虫的知识,在网上搜索了一下,大部分都是基于Python2.x的。因此打算写一个Python3.x的爬虫笔记,以便后续回顾,欢迎一起交流、共同进步。

一、预备知识

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

可以在通过如下方式进行学习:

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

URL:http://www.liaoxuefeng.com/

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

URL:http://www.runoob.com/python3/python3-tutorial.html

(3)鱼C工作室Python教程(视频):

小甲鱼老师很厉害,讲课风格幽默诙谐,如果时间充裕可以考虑看视频。

URL:http://www.fishc.com/

2.开发环境搭建:

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

URL:http://www.cnblogs.com/nx520zj/p/5787393.html

URL:http://blog.csdn.net/c406495762/article/details/56489253

二、网络爬虫的定义

网络爬虫,也叫网络蜘蛛(Web Spider),如果把互联网比喻成一个蜘蛛网,Spider就是一只在网上爬来爬去的蜘蛛。网络爬虫就是根据网页的地址来寻找网页的,也就是URL。举一个简单的例子,我们在浏览器的地址栏中输入的字符串就是URL,例如:https://www.baidu.com/

URL就是同意资源定位符(Uniform Resource Locator),它的一般格式如下(带方括号[]的为可选项):

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

URL的格式由三部分组成:

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

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

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

网络爬虫就是根据这个URL来获取网页信息的。

三、简单爬虫实例

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

1.urllib.request模块是用来打开和读取URLs的;

2.urllib.error模块包含一些有urllib.request产生的错误,可以使用try进行捕捉处理;

3.urllib.parse模块包含了一些解析URLs的方法;

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

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

urlopen有一些可选参数,具体信息可以查阅Python自带的documentation。

了解到这些,我们就可以写一个最简单的程序,文件名为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文件,输出信息是一样的,如下:

其实这就是浏览器接收到的信息,只不过我们在使用浏览器的时候,浏览器已经将这些信息转化成了界面信息供我们浏览。当然这些代码我们也可以从浏览器中查看到。例如,使用谷歌浏览器,在任意界面单击右键选择检查,也就是审查元素(不是所有页面都可以审查元素的,例如起点中文网付费章节就不行.),以百度界面为例,截图如下:

可以看到,右边就是我们的审查结果。我们可以在本地,也就是浏览器(客户端)更改元素,但是这个不会上传到服务器端。例如我可以修改自己的支付宝余额装一装,比如这样:

我实际有这些钱吗?显然苦逼的我,是不会有这些钱的,我只不过是修改了下审查元素的信息而已。

有些跑偏,不过说的道理就是,浏览器就是作为客户端从服务器端获取信息,然后将信息解析,再展示给我们的。

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

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

# -*- 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:关于编码方式的内容,可以自行百度,或者看下这篇博客:

URL:http://blog.csdn.net/csywwx2008/article/details/17137097

打油诗

我不在乎我的作品文章是被现在的人读还是由子孙后代来读。既然上帝花了六千年来等一位观察者,我可以花上一个世纪来等待读者。

python爬虫设计模式_Python3网络爬虫(一):利用urllib进行简单的网页抓取相关推荐

  1. python外国网站爬虫_Python3网络爬虫(一):利用urllib进行简单的网页抓取

    一.预备知识 1.Python3.x基础知识学习: 可以在通过如下方式进行学习: (1)廖雪峰Python3教程(文档): (2)菜鸟教程Python3教程(文档): (3)鱼C工作室Python教程 ...

  2. Python3网络爬虫(一):利用urllib进行简单的网页抓取

    运行平台:Windows Python版本:Python3.x IDE:Sublime text3 转载请注明作者和出处:http://blog.csdn.net/c406495762/article ...

  3. beautifulsoup网页爬虫解析_Python3 网络爬虫快速入门实战解析

    点击上方"Python高校",关注 文末干货立马到手 作者:Jack Cui http://cuijiahua.com/blog/2017/10/spider_tutorial_1 ...

  4. python爬虫怎么爬同一个网站的多页数据-如何用Python爬数据?(一)网页抓取

    如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...

  5. 网络爬虫系列之网页抓取

    ​ (你的世界是个什么样的世界?你说,我们倾听!) ----------------- 网页抓取 我们在抓取网页时需要安装requests包,具体安装过程如下: pip install request ...

  6. python爬网站数据实例-如何用Python爬数据?(一)网页抓取

    如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...

  7. vs用Python爬数据?(一)网页抓取

    你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. (由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开.如有需要,请 ...

  8. [Python]网络爬虫(二):利用urllib2通过指定的URL抓取网页内容

    版本号:Python2.7.5,Python3改动较大,各位另寻教程. 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地.  类似于使用程序模拟IE浏览器的功能,把URL作 ...

  9. python新闻聚合_基于Python的新闻聚合系统网络爬虫研究

    基于 Python 的新闻聚合系统网络爬虫研究 左卫刚 [摘 要] 摘 要 本研究旨在创建一个能够从不同页面布局中提取数据的开源爬 虫,其中包括网络爬虫. API .网络爬虫调度器以及 Socket ...

最新文章

  1. python学习之面向对象(三)
  2. svchost服务(DLL服务)
  3. python全栈-Day 14
  4. 如何基于OceanBase构建应用和数据库的异地多活
  5. Eclipse之JSON导包
  6. vc 只有顶级窗口可以弹出窗口_如何在Mac上允许弹出窗口
  7. C#中三种截屏方式总结
  8. 分布式离线计算—MapReduce—为什么被淘汰了?
  9. 基于链路思想的SpringBoot单元测试快速写法
  10. GetBitmapBits和GetDIBits的区别(Windows GDI)
  11. NAT(网络地址转换)实现方式
  12. docker容易内部怎么编辑_在Docker的工作流中常见问题及最终方案
  13. python︱函数、for、if、_name_、迭代器、防范报错、类定义、装饰器、argparse模块、yield
  14. python基础 关于制表符号\t的简单理解,为什么使用制表符\t后,字符的位置不一样?制表的空间距离也不一样的简单解答,希望可以帮助各位
  15. PHP 谷歌翻译类API 接口
  16. 别对“智能写作”太过情感依赖
  17. dos命令中DATE:~0,10输出日期格式名称格式/改为-
  18. 阿里云大数据组件的基本介绍
  19. 《软硬结合——从零打造物联网》
  20. ubuntu 20.04 安装 flameshot截图工具

热门文章

  1. Oracle/PLSQL AFTER DELETE Trigger
  2. Django讲课笔记06:搭建项目开发环境
  3. Spring Boot基础学习笔记01:Spring Boot入门程序
  4. 无心剑英译罗兰《境由心造》
  5. Python案例:GUI用户注册信息管理系统
  6. 星期、月份、序号和日期_10
  7. 鸿蒙系统联合,跨界联合 华为鸿蒙系统赋能厨电业
  8. C#语法之---多线程、并发与并行概念总结
  9. android 自定义button,android – 如何添加自定义按钮状态
  10. 单例对象会被jvm的gc时回收吗_设计模式专题02-单例五种创建方式