python爬虫实战之最简单的网页爬虫教程


Posted in Python onAugust 13, 2017

前言

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。最近对python爬虫有了强烈地兴趣,在此分享自己的学习路径,欢迎大家提出建议。我们相互交流,共同进步。话不多说了,来一起看看详细的介绍:

1.开发工具

笔者使用的工具是sublime text3,它的短小精悍(可能男人们都不喜欢这个词)使我十分着迷。推荐大家使用,当然如果你的电脑配置不错,pycharm可能更加适合你。

sublime text3搭建python开发环境推荐查看这篇文章:

[sublime搭建python开发环境][https://3water.com/article/51838.htm]

2.爬虫介绍

爬虫顾名思义,就是像虫子一样,爬在Internet这张大网上。如此,我们便可以获取自己想要的东西。

既然要爬在Internet上,那么我们就需要了解URL,法号“统一资源定位器”,小名“链接”。其结构主要由三部分组成:

(1)协议:如我们在网址中常见的HTTP协议。

(2)域名或者IP地址:域名,如:www.baidu.com,IP地址,即将域名解析后对应的IP。

(3)路径:即目录或者文件等。

3.urllib开发最简单的爬虫

(1)urllib简介

Module Introduce
urllib.error Exception classes raised by urllib.request.
urllib.parse Parse URLs into or assemble them from components.
urllib.request Extensible library for opening URLs.
urllib.response Response classes used by urllib.
urllib.robotparser Load a robots.txt file and answer questions about fetchability of other URLs.

(2)开发最简单的爬虫

百度首页简洁大方,很适合我们爬虫。

爬虫代码如下:

from urllib import request

def visit_baidu():
 URL = "http://www.baidu.com"
 # open the URL
 req = request.urlopen(URL)
 # read the URL 
 html = req.read()
 # decode the URL to utf-8
 html = html.decode("utf_8")
 print(html)

if __name__ == '__main__':
 visit_baidu()

结果如下图:

python爬虫实战之最简单的网页爬虫教程

我们可以通过在百度首页空白处右击,查看审查元素来和我们的运行结果对比。

当然,request也可以生成一个request对象,这个对象可以用urlopen方法打开。

代码如下:

from urllib import request

def vists_baidu():
 # create a request obkect
 req = request.Request('http://www.baidu.com')
 # open the request object
 response = request.urlopen(req)
 # read the response 
 html = response.read()
 html = html.decode('utf-8')
 print(html)

if __name__ == '__main__':
 vists_baidu()

运行结果和刚才相同。

(3)错误处理

错误处理通过urllib模块来处理,主要有URLError和HTTPError错误,其中HTTPError错误是URLError错误的子类,即HTTRPError也可以通过URLError捕获。

HTTPError可以通过其code属性来捕获。

处理HTTPError的代码如下:

from urllib import request
from urllib import error

def Err():
 url = "https://segmentfault.com/zzz"
 req = request.Request(url)

 try:
 response = request.urlopen(req)
 html = response.read().decode("utf-8")
 print(html)
 except error.HTTPError as e:
 print(e.code)
if __name__ == '__main__':
 Err()

运行结果如图:

python爬虫实战之最简单的网页爬虫教程

404为打印出的错误代码,关于此详细信息大家可以自行百度。

URLError可以通过其reason属性来捕获。

chuliHTTPError的代码如下:

from urllib import request
from urllib import error

def Err():
 url = "https://segmentf.com/"
 req = request.Request(url)

 try:
 response = request.urlopen(req)
 html = response.read().decode("utf-8")
 print(html)
 except error.URLError as e:
 print(e.reason)
if __name__ == '__main__':
 Err()

运行结果如图:

python爬虫实战之最简单的网页爬虫教程

既然为了处理错误,那么最好两个错误都写入代码中,毕竟越细致越清晰。须注意的是,HTTPError是URLError的子类,所以一定要将HTTPError放在URLError的前面,否则都会输出URLError的,如将404输出为Not Found。

代码如下:

from urllib import request
from urllib import error

# 第一种方法,URLErroe和HTTPError
def Err():
 url = "https://segmentfault.com/zzz"
 req = request.Request(url)

 try:
 response = request.urlopen(req)
 html = response.read().decode("utf-8")
 print(html)
 except error.HTTPError as e:
 print(e.code)
 except error.URLError as e:
 print(e.reason)

大家可以更改url来查看各种错误的输出形式。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python语言编写电脑时间自动同步小工具
Mar 08 Python
Python列表计数及插入实例
Dec 17 Python
Python实现二分法算法实例
Feb 02 Python
用Python创建声明性迷你语言的教程
Apr 13 Python
在Python中使用HTML模版的教程
Apr 29 Python
python和ruby,我选谁?
Sep 13 Python
基于python3 类的属性、方法、封装、继承实例讲解
Sep 19 Python
Python + selenium自动化环境搭建的完整步骤
May 19 Python
Python 实现两个列表里元素对应相乘的方法
Nov 14 Python
Django网络框架之HelloDjango项目创建教程
Jun 06 Python
pytorch1.0中torch.nn.Conv2d用法详解
Jan 10 Python
django中的数据库迁移的实现
Mar 16 Python
详解python中executemany和序列的使用方法
Aug 12 #Python
mysql 之通过配置文件链接数据库
Aug 12 #Python
python+selenium开发环境搭建图文教程
Aug 11 #Python
Python实现的递归神经网络简单示例
Aug 11 #Python
Python调用系统底层API播放wav文件的方法
Aug 11 #Python
Django 导出 Excel 代码的实例详解
Aug 11 #Python
python技能之数据导出excel的实例代码
Aug 11 #Python
You might like
PHP实现HTML页面静态化的方法
2015/11/04 PHP
php远程下载类分享
2016/04/13 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
PHP 使用二进制保存用户状态的实例
2018/01/29 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
实例浅析js的this
2016/12/11 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
2017/08/18 jQuery
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
Python深入学习之装饰器
2014/08/31 Python
详解Python中expandtabs()方法的使用
2015/05/18 Python
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
如何使用Python抓取网页tag操作
2020/02/14 Python
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
甲方资料员岗位职责
2013/12/13 职场文书
年度考核评语
2014/01/19 职场文书
年度考核自我鉴定
2014/02/02 职场文书
护士年终考核评语
2014/12/31 职场文书
步步惊心观后感
2015/06/12 职场文书
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle
字节飞书面试promise.all实现示例
2022/06/16 Javascript