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 字典dict使用介绍
Nov 30 Python
深入理解NumPy简明教程---数组3(组合)
Dec 17 Python
Python 模拟登陆的两种实现方法
Aug 10 Python
Python实现修改IE注册表功能示例
May 10 Python
Python基于Tkinter模块实现的弹球小游戏
Dec 27 Python
Python远程视频监控程序的实例代码
May 05 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
Python中断多重循环的几种方式详解
Feb 10 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 Python
浅谈如何使用python抓取网页中的动态数据实现
Aug 17 Python
浅谈Python 中的复数问题
May 19 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 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
2016/05/06 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
如何防止回车(enter)键提交表单
2014/05/11 Javascript
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
JS实现的base64加密解密操作示例
2018/04/18 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
python smtplib模块发送SSL/TLS安全邮件实例
2015/04/08 Python
python实现class对象转换成json/字典的方法
2016/03/11 Python
Python 正则表达式入门(中级篇)
2016/12/07 Python
python实现决策树
2017/12/21 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
使用Django和Python创建Json response的方法
2018/03/26 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
带你认识Django
2019/01/15 Python
python 提取文件指定列的方法示例
2019/08/07 Python
Numpy数组的广播机制的实现
2020/11/03 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
python中四舍五入的正确打开方式
2021/01/18 Python
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
工地标语大全
2014/06/18 职场文书
党员检讨书范文
2014/12/27 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
教师反邪教心得体会
2016/01/15 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python