Python爬虫——写出最简单的网页爬虫

最近对python爬虫有了强烈地兴趣,在此分享自己的学习路径,欢迎大家提出建议。我们相互交流,共同进步。

1.开发工具

笔者使用的工具是sublime text3,它的短小精悍(可能男人们都不喜欢这个词)使我十分着迷。推荐大家使用,当然如果你的电脑配置不错,pycharm可能更加适合你。

sublime text3搭建python开发环境推荐查看此博客:

[sublime搭建python开发环境][http://www.cnblogs.com/codefish/p/4806849.html]

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)开发最简单的爬虫

百度首页简洁大方,很适合我们爬虫。

爬虫代码如下:


  1. from urllib import request 
  2.  
  3. def visit_baidu(): 
  4.     URL = "http://www.baidu.com" 
  5.     # open the URL 
  6.     req = request.urlopen(URL) 
  7.     # read the URL  
  8.     html = req.read() 
  9.     # decode the URL to utf-8 
  10.     html = html.decode("utf_8") 
  11.     print(html) 
  12.  
  13. if __name__ == '__main__': 
  14.     visit_baidu()  

结果如下图:

我们可以通过在百度首页空白处右击,查看审查元素来和我们的运行结果对比。

当然,request也可以生成一个request对象,这个对象可以用urlopen方法打开。

代码如下:


  1. from urllib import request 
  2.  
  3. def vists_baidu(): 
  4.     # create a request obkect 
  5.     req = request.Request('http://www.baidu.com') 
  6.     # open the request object 
  7.     response = request.urlopen(req) 
  8.     # read the response  
  9.     html = response.read() 
  10.     html = html.decode('utf-8') 
  11.     print(html) 
  12.  
  13. if __name__ == '__main__': 
  14.     vists_baidu()  

运行结果和刚才相同。

(3)错误处理

错误处理通过urllib模块来处理,主要有URLError和HTTPError错误,其中HTTPError错误是URLError错误的子类,即HTTRPError也可以通过URLError捕获。

HTTPError可以通过其code属性来捕获。

处理HTTPError的代码如下:


  1. from urllib import request 
  2. from urllib import error 
  3.  
  4. def Err(): 
  5.     url = "https://segmentfault.com/zzz" 
  6.     req = request.Request(url) 
  7.  
  8.     try: 
  9.         response = request.urlopen(req) 
  10.         html = response.read().decode("utf-8") 
  11.         print(html) 
  12.     except error.HTTPError as e: 
  13.         print(e.code) 
  14. if __name__ == '__main__': 
  15.     Err()  

运行结果如图:

404为打印出的错误代码,关于此详细信息大家可以自行百度。

URLError可以通过其reason属性来捕获。

chuliHTTPError的代码如下:


  1. from urllib import request 
  2. from urllib import error 
  3.  
  4. def Err(): 
  5.     url = "https://segmentf.com/" 
  6.     req = request.Request(url) 
  7.  
  8.     try: 
  9.         response = request.urlopen(req) 
  10.         html = response.read().decode("utf-8") 
  11.         print(html) 
  12.     except error.URLError as e: 
  13.         print(e.reason) 
  14. if __name__ == '__main__': 
  15.     Err()  

运行结果如图:

既然为了处理错误,那么最好两个错误都写入代码中,毕竟越细致越清晰。须注意的是,HTTPError是URLError的子类,所以一定要将HTTPError放在URLError的前面,否则都会输出URLError的,如将404输出为Not Found。

代码如下:


  1. from urllib import request 
  2. from urllib import error 
  3.  
  4. # 第一种方法,URLErroe和HTTPError 
  5. def Err(): 
  6.     url = "https://segmentfault.com/zzz" 
  7.     req = request.Request(url) 
  8.  
  9.     try: 
  10.         response = request.urlopen(req) 
  11.         html = response.read().decode("utf-8") 
  12.         print(html) 
  13.     except error.HTTPError as e: 
  14.         print(e.code) 
  15.     except error.URLError as e: 
  16.         print(e.reason)  

大家可以更改url来查看各种错误的输出形式。

作者:xiaomi

来源:51CTO

时间: 2024-09-27 23:10:42

Python爬虫——写出最简单的网页爬虫的相关文章

如何用PYTHON代码写出音乐

如何用PYTHON代码写出音乐 什么是MIDI 博主本人虽然五音不全,而且唱歌还很难听,但是还是非常喜欢听歌的.我一直在做这样的尝试,就是通过人工智能算法实现机器自动的作词和编曲(在这里预告下,通过深度学习写歌词已经实现了,之后会分享给大家),本文我们主要聊下如何写曲. 说到用代码写曲子,有一个东西大家一定要了解就是MIDI.MIDI是一种乐器数字接口,是编曲界最广泛的音乐标准格式.MIDI并不是真正意义上的音乐文件,大家可以把它理解成乐谱,需要有环境编译MIDI文件,才可以生成音乐.这个关系有

【求助】用Python写出一个遍历网站所有url的小工具

问题描述 [求助]用Python写出一个遍历网站所有url的小工具 用Python 怎么写出一个 遍历网站所有url的小工具, 包括首页的url和所有子网页url 不能有重复的url,我自己写的只能遍历一个网页的 首页,子网页的遍历不出来,新人 没币 ,求好心人帮助!!! 解决方案 http://www.cnblogs.com/fnng/p/3576154.htmlhttp://www.oschina.net/code/list_releted_codes?id=25402 解决方案二: htt

如何写出兼容性很好的页面

写出好的页面前首先你要把HTML4与HTML5学会了,然后CSS,CSS3也有一定的掌握. 通常情况下,不同类型的网站都去认认真真的排版后,对前端就有一定的掌握程度,对写静态页面问题就不大了.至于个数嘛,3个完整网站以上. 提醒:如果要写出非常好的页面,js是必不可少的,这对初学前端的人来说,就有点难度了,但也别胆怯,按照学习的先后进度来学习,先学HTML+CSS,再学习HTML5+CSS3,学到一定程序后,再去接触javascript,我相信就算是自学,HTML+CSS 2个月左右,javas

网页爬虫问题

问题描述 我用httpurlconnection写了一个小的网页爬虫去爬一个论坛,这个论坛可以接任务,可是同一个IP在同一天只能接一次,这样,我只能接一次就不能接,有什么办法能让httpurlconnection每次都用不同的IP连接呢? 解决方案 解决方案二:可以用代理

《用Python写网络爬虫》——2.2 三种网页抓取方法

2.2 三种网页抓取方法 现在我们已经了解了该网页的结构,下面将要介绍三种抓取其中数据的方法.首先是正则表达式,然后是流行的BeautifulSoup模块,最后是强大的lxml模块. 2.2.1 正则表达式 如果你对正则表达式还不熟悉,或是需要一些提示时,可以查阅https://docs.python.org/2/howto/regex.html 获得完整介绍. 当我们使用正则表达式抓取面积数据时,首先需要尝试匹配 元素中的内容,如下所示. >>> import re >>&

[Python]新手写爬虫全过程(转)

今天早上起来,第一件事情就是理一理今天该做的事情,瞬间get到任务,写一个只用python字符串内建函数的爬虫,定义为v1.0,开发中的版本号定义为v0.x.数据存放?这个是一个练手的玩具,就写在txt文本里吧.其实主要的不是学习爬虫,而是依照这个需求锻炼下自己的编程能力,最重要的是要有一个清晰的思路(我在以这个目标努力着).ok,主旨已经订好了,开始'撸串'了.   目标网站:http://bohaishibei.com/post/category/main/(一个很有趣的网站,一段话配一个图

Python天气预报采集器实现代码(网页爬虫)_python

爬虫简单说来包括两个步骤:获得网页文本.过滤得到数据. 1.获得html文本. python在获取html方面十分方便,寥寥数行代码就可以实现我们需要的功能. 复制代码 代码如下: def getHtml(url): page = urllib.urlopen(url) html = page.read() page.close() return html 这么几行代码相信不用注释都能大概知道它的意思. 2.根据正则表达式等获得需要的内容. 使用正则表达式时需要仔细观察该网页信息的结构,并写出正

python实现多线程网页爬虫的2个例子

一般来说,使用线程有两种模式, 一种是创建线程要执行的函数, 把这个函数传递进Thread对象里,让它来执行. 另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的class里. 实现多线程网页爬虫,采用了多线程和锁机制,实现了广度优先算法的网页爬虫. 先给大家简单介绍下我的实现思路: 对于一个网络爬虫,如果要按广度遍历的方式下载,它是这样的: 1.从给定的入口网址把第一个网页下载下来 2.从第一个网页中提取出所有新的网页地址,放入下载列表中 3.按下载列表中的地

Python写的一个简单监控系统

  这篇文章主要介绍了Python写的一个简单监控系统,本文讲解了详细的编码步骤,并给给出相应的实现代码,需要的朋友可以参考下 市面上有很多开源的监控系统:Cacti.nagios.zabbix.感觉都不符合我的需求,为什么不自己做一个呢 用Python两个小时徒手撸了一个简易的监控系统,给大家分享一下,希望能对大家有所启发 首先数据库建表 建立一个数据库"falcon",建表语句如下: ? 1 2 3 4 5 6 7 8 9 10 11 CREATE TABLE `stat` ( `