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 zip文件 压缩
Dec 24 Python
python计数排序和基数排序算法实例
Apr 25 Python
Python处理RSS、ATOM模块FEEDPARSER介绍
Feb 18 Python
详解Python2.x中对Unicode编码的使用
Apr 03 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 Python
Python编程中实现迭代器的一些技巧小结
Jun 21 Python
轻松掌握python设计模式之访问者模式
Nov 18 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
对python抓取需要登录网站数据的方法详解
May 21 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
python自动计算图像数据集的RGB均值
Jun 18 Python
python数字图像处理实现图像的形变与缩放
Jun 28 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编写PDF文档生成器
2006/10/09 PHP
php错误、异常处理机制(补充)
2012/05/07 PHP
javascript 二维数组的实现与应用
2010/03/16 Javascript
passwordStrength 基于jquery的密码强度检测代码使用介绍
2011/10/08 Javascript
JavaScript函数模式详解
2014/11/07 Javascript
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
详解Angular.js指令中scope类型的几种特殊情况
2017/02/21 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
原生JS实现不断变化的标签
2017/05/22 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
Bootstrap Table使用整理(一)
2017/06/09 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
JavaScript类型相关的常用操作总结
2019/02/14 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
python递归下载文件夹下所有文件
2019/08/31 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
python时间序列数据转为timestamp格式的方法
2020/08/03 Python
django使用graphql的实例
2020/09/02 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
.net工程师笔试题
2012/06/09 面试题
金士达面试非笔试
2012/03/14 面试题
领导调研接待方案
2014/02/27 职场文书
函授生自我鉴定
2014/03/25 职场文书
教师个人考察材料
2014/12/16 职场文书
怎样写离婚协议书
2015/01/26 职场文书
三峡导游词
2015/01/31 职场文书
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server
SQLServer常见数学函数梳理总结
2022/08/05 MySQL