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网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
Apr 25 Python
在Django中限制已登录用户的访问的方法
Jul 23 Python
python自动翻译实现方法
May 28 Python
深入探究Django中的Session与Cookie
Jul 30 Python
python验证码识别实例代码
Feb 03 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
Jul 09 Python
基于pytorch的保存和加载模型参数的方法
Aug 17 Python
Python使用APScheduler实现定时任务过程解析
Sep 11 Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 Python
用Python绘制漫步图实例讲解
Feb 26 Python
利用Python自动化操作AutoCAD的实现
Apr 01 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 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 常用字符串函数总结
2008/03/15 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
PHP后台备份MySQL数据库的源码实例
2019/03/18 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
Laravel find in set排序实例
2019/10/09 PHP
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
Python气泡提示与标签的实现
2020/04/01 Python
Python数据正态性检验实现过程
2020/04/18 Python
django filter过滤器实现显示某个类型指定字段不同值方式
2020/07/16 Python
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
下面这个程序执行后会有什么错误或者效果
2014/11/03 面试题
大三在校生电子商务求职信
2013/10/29 职场文书
医院义诊活动总结
2014/07/04 职场文书
个人委托书范本
2014/09/13 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
2014年统计工作总结
2014/11/21 职场文书
保送生自荐信范文
2015/03/26 职场文书
天那边观后感
2015/06/09 职场文书
python3 hdf5文件 遍历代码
2021/05/19 Python