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分割文件的常用方法
Nov 01 Python
利用Python学习RabbitMQ消息队列
Nov 30 Python
Python socket网络编程TCP/IP服务器与客户端通信
Jan 05 Python
详解Python中的静态方法与类成员方法
Feb 28 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
浅谈numpy库的常用基本操作方法
Jan 09 Python
django框架防止XSS注入的方法分析
Jun 21 Python
30行Python代码实现高分辨率图像导航的方法
May 22 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 Python
Pycharm在指定目录下生成文件和删除文件的实现
Dec 28 Python
Python使用Beautiful Soup(BS4)库解析HTML和XML
Jun 05 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
与空气斗智斗勇的经典《Overlord》,传说中的“无稽之谈”
2020/04/09 日漫
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
php图像验证码生成代码
2017/06/08 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
js类型检查实现代码
2010/10/29 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
JavaScript整除运算函数ceil和floor的区别分析
2015/04/14 Javascript
利用js+css+html实现固定table的列头不动
2016/12/08 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
webpack下实现动态引入文件方法
2018/02/22 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
npm qs模块使用详解
2020/02/07 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
Python序列化基础知识(json/pickle)
2017/10/19 Python
在Pycharm中修改文件默认打开方式的方法
2019/01/17 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
python学生信息管理系统实现代码
2019/12/17 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
综合实践活动总结
2014/05/05 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
迟到检讨书
2015/01/26 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
Python基础之常用库常用方法整理
2021/04/30 Python