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实现的检测web服务器健康状况的小程序
Sep 17 Python
Django 添加静态文件的两种实现方法(必看篇)
Jul 14 Python
Python实现桶排序与快速排序算法结合应用示例
Nov 22 Python
Python字典,函数,全局变量代码解析
Dec 18 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
python 通过logging写入日志到文件和控制台的实例
Apr 28 Python
python把数组中的数字每行打印3个并保存在文档中的方法
Jul 17 Python
Python实现全排列的打印
Aug 18 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
Sep 03 Python
Pandas之ReIndex重新索引的实现
Jun 25 Python
Python中的类与类型示例详解
Jul 10 Python
基于Python批量生成指定尺寸缩略图代码实例
Nov 20 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 模板高级篇总结
2006/12/21 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
2011/08/12 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
php利用array_search与array_column实现二维数组查找
2019/07/08 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
javascript中for/in循环及使用技巧
2015/09/01 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
djang常用查询SQL语句的使用代码
2019/02/15 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
python opencv 实现对图像边缘扩充
2020/01/19 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
中东地区为妈妈们提供一切的头号购物目的地:Sprii
2018/05/06 全球购物
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
一套Java笔试题
2016/08/20 面试题
英文推荐信格式范文
2014/05/09 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
无犯罪记录证明
2014/09/19 职场文书
成都人事代理协议书
2014/10/25 职场文书
初中英语教学反思范文
2016/02/15 职场文书
《窃读记》教学反思
2016/02/18 职场文书