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的Tornado框架结合memcached页面改善博客性能
Apr 24 Python
Python对象类型及其运算方法(详解)
Jul 05 Python
Python制作词云的方法
Jan 03 Python
python动态进度条的实现代码
Jul 03 Python
python pickle存储、读取大数据量列表、字典数据的方法
Jul 07 Python
python打印直角三角形与等腰三角形实例代码
Oct 20 Python
Pycharm最新激活码2019(推荐)
Dec 31 Python
pycharm 关掉syntax检查操作
Jun 09 Python
PyQt5 QDockWidget控件应用详解
Aug 12 Python
Python ConfigParser模块的使用示例
Oct 12 Python
python二维图制作的实例代码
Dec 03 Python
Python项目实战之使用Django框架实现支付宝付款功能
Feb 23 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面试题(对属性或方法的访问控制)
2012/09/13 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
Prototype最新版(1.5 rc2)使用指南(1)
2007/01/10 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
JS实现单行文字不间断向上滚动的方法
2015/01/29 Javascript
无刷新上传文件并返回自定义值
2015/06/11 Javascript
原生JS实现图片轮播与淡入效果的简单实例
2016/08/21 Javascript
javascript判断firebug是否开启的方法
2016/11/23 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
基于原生js实现判断元素是否有指定class名
2020/07/11 Javascript
跟老齐学Python之永远强大的函数
2014/09/14 Python
python递归函数绘制分形树的方法
2018/06/22 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
Django model反向关联名称的方法
2018/12/15 Python
python导入模块交叉引用的方法
2019/01/19 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
Python函数式编程实例详解
2020/01/17 Python
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
Final类有什么特点
2012/04/25 面试题
面试后的英文感谢信
2014/02/01 职场文书
英语演讲稿3分钟
2014/04/29 职场文书
第二批党的群众路线教育实践活动总结报告
2014/10/30 职场文书
2014公司年终工作总结
2014/12/19 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
孙振耀退休感言
2015/08/01 职场文书
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python
基于Python实现对比Exce的工具
2022/04/07 Python
Java线程的6种状态与生命周期
2022/05/11 Java/Android
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
2022/06/28 Oracle