本人以前用的都是python2.7,但看网上很多教程都是以python3为例的,所以便切换版本,导入urllib、lxml、beautifulsoup4等库。

下面介绍下两个版本对urllib库的区别,方便以前使用python2.7的能很快适应python3版本。在Python2.x中,分为Urllib库和Urllin2库,Python3.x之后都合并到Urllib库中。

  • 在Pytho2.x中使用import urllib2——-对应的,在Python3.x中会使用import urllib.request,urllib.error。
  • 在Pytho2.x中使用import urllib——-对应的,在Python3.x中会使用import urllib.request,urllib.error,urllib.parse。
  • 在Pytho2.x中使用import urlparse——-对应的,在Python3.x中会使用import urllib.parse。
  • 在Pytho2.x中使用import urlopen——-对应的,在Python3.x中会使用import urllib.request.urlopen。
  • 在Pytho2.x中使用import urlencode——-对应的,在Python3.x中会使用import urllib.parse.urlencode。
  • 在Pytho2.x中使用import urllib.quote——-对应的,在Python3.x中会使用import urllib.request.quote。
  • 在Pytho2.x中使用cookielib.CookieJar——-对应的,在Python3.x中会使用http.CookieJar。
  • 在Pytho2.x中使用urllib2.Request——-对应的,在Python3.x中会使用urllib.request.Request。

快速使用urllib库爬取一个网页

首先需要导入用到的模块:urllib.request。

import urllib.request 

导入模块后使用urllib.request.urlopen(url,data = None,[timeout])打开并爬取一个网页,以百度首页为例,并将其赋给一个变量url。其中data是post提交的数据,timeout是设置网站的访问超时时间。

url = urllib.request.urlopen("http://www.baidu.com")

此后我们可以将爬取的网页读取出来,常见的读取方式有以下三种:

  1. read()读取文件的全部内容,与readlines()不同的是,read()会把读取到的内容赋给一个字符串变量。
  2. readlines()读取文件的全部内容,readlines()会把读取到的内容赋值给一个列表变量。
  3. readline()读取文件的一行内容。
data = url.read()
dataline = url.readline()
datalines = url.readlines()

最后将读取的数据写进html格式的文件中并保存,完整代码如下。

import urllib.request

url = urllib.request.urlopen("http://www.baidu.com")
data = url.read()
dataline = url.readline()
datalines = url.readlines()
#print (data)
#print (dataline)
#print (datalines)
fhandle = open('/home/wl/wang.html','wb')
fhandle.write(data)
fhandle.close()

用浏览器打开wang.html文件可得下图:

此时我们已经成功地用程序将百度首页的代码爬取到本地,只不过图片暂时没有爬取下来而已。除了这种方法外,我们还可以使用urllib.request里面的urlretrieve()函数直接将对应信息写入本地文件。

url = urllib.request.urlretrieve("http://www.baidu.com",filename = "/home/wl/1.html")

urlretrieve()函数在执行过程中会产生一些缓存,可以用urlcleanup()进行清除。除此之外,urllib还有一些常见用法,下面一一举例。

1.获取当前爬取网页的状态码

<<<url.getcode()
200

200表示响应正确,404表示失败。

2.获取当前爬取的url地址

<<<url.geturl()
'http://www.baidu.com'

3.一般来说,URL标准中只会允许一部分ASCII字符比如数字、字母、部分符号等,而其他的一些字符,比如汉字、":"、"&"等,是不符合URL标准的。此时,我们需要编码。

>>>urllib.request.quote('http://www.baidu.com')
'http%3A//www.baidu.com'

4.对编码的网址进行解码

>>>urllib.request.unquote('http%3A//www.baidu.com')
'http://www.baidu.com'

5.超时设置

有的时候,我们访问一个网页,如果该网页长时间未响应,那么系统就会判断该网页超时了,即无法打开该网页。 有的时候,我们需要根据自己的需要来设置超时的时间值。我们可以在urllib.request.urlopen()打开网址的时候,通过timeout字段设置。 设置格式为:urllib.request.urlopen(要打开的网址,timeout=时间值)。

6.开启Debuglog

  如果像想边运行边打印调试日志,就需要开启Deuglog。

import urllib.request

url = "https://mp.csdn.net/postlist/list/enable"
httphd = urllib.request.HTTPHandler(debuglevel = 1)
httpshd = urllib.request.HTTPSHandler (debuglevel = 1)
opener = urllib.request.build_opener(httphd,httpshd)
opener.addheaders = [('User-Agent','Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45')]
urllib.request.install_opener(opener)
data = urllib.request.urlopen(url).read()
print (len(data))

爬虫笔记(一)——快速使用urllib库的更多相关文章

  1. python爬虫---从零开始(二)Urllib库

    接上文再继续我们的爬虫,这次我们来述说Urllib库 1,什么是Urllib库 Urllib库是python内置的HTTP请求库 urllib.request 请求模块 urllib.error 异常 ...

  2. 【Python爬虫】HTTP基础和urllib库、requests库的使用

    引言: 一个网络爬虫的编写主要可以分为三个部分: 1.获取网页 2.提取信息 3.分析信息 本文主要介绍第一部分,如何用Python内置的库urllib和第三方库requests库来完成网页的获取.阅 ...

  3. Python爬虫(2):urllib库

    爬虫常用库urllib 注:运行环境为PyCharm urllib是Python3内置的HTTP请求库 urllib.request:请求模块 urllib.error:异常处理模块 urllib.p ...

  4. 爬虫(二):Urllib库详解

    什么是Urllib: python内置的HTTP请求库 urllib.request : 请求模块 urllib.error : 异常处理模块 urllib.parse: url解析模块 urllib ...

  5. 爬虫(三)-之Urllib库的基本使用

    什么是Urllib Urllib是python内置的HTTP请求库 包括以下模块 urllib.request 请求模块 urllib.error 异常处理模块 urllib.parse   url解 ...

  6. Python爬虫学习笔记-1.Urllib库

    urllib 是python内置的基本库,提供了一系列用于操作URL的功能,我们可以通过它来做一个简单的爬虫. 0X01 基本使用 简单的爬取一个页面: import urllib2 request ...

  7. 爬虫学习笔记-urllib库

    urllib库是python中一个最基本的网络请求库.可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据. urlopen函数:在python3的urllib库中,所有和网络 ...

  8. Python爬虫实战(一) 使用urllib库爬取拉勾网数据

    本笔记写于2020年2月4日.Python版本为3.7.4,编辑器是VS code 主要参考资料有: B站视频av44518113 Python官方文档 PS:如果笔记中有任何错误,欢迎在评论中指出, ...

  9. python爬虫之urllib库(一)

    python爬虫之urllib库(一) urllib库 urllib库是python提供的一种用于操作URL的模块,python2中是urllib和urllib2两个库文件,python3中整合在了u ...

随机推荐

  1. java内存机制 垃圾回收

    gc机制一 1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc ...

  2. Pickle incompatibility of numpy arrays between Python 2 and 3

    Traceback (most recent call last): File "mnist.py", line 7, in <module> train_set, v ...

  3. 吴裕雄--天生自然 PHP开发学习:类型比较

    <?php if(42 == "42") { echo '1.值相等'; } echo PHP_EOL; // 换行符 if(42 === "42") { ...

  4. 程序员:java中直接或间接创建线程的方法总结

    在java开发中,经常会涉及多线程的编码,那么通过直接或间接创建线程的方法有哪些?现整理如下: 1.继承Thread类,重写run()方法 class Worker extends Thread { ...

  5. Mybatis基本配置(一)

    1. Mybatis介绍 MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用 ...

  6. 大数据高可用集群环境安装与配置(02)——配置ntp服务

    NTP服务概述 NTP服务器[Network Time Protocol(NTP)]是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精 ...

  7. java正则 读取html 获取标题/超链接/链接文本/内容

    java正则 读取html 获取标题/超链接/链接文本/内容 参考链接:http://yijianfengvip.blog.163.com/blog/static/175273432201142785 ...

  8. 开源PLM软件Aras详解八 Aras之RelationshipTypes关系类详解

    在Aras中,在之前ItemType解析中有提到,Aras中实际ItemType对应的就是一张表,那么,ItemType与ItemType之间是如何关联的呢, 如果我们需要捋清楚ItemType与It ...

  9. 题解 P1019 【单词接龙】

    题目 单词具体是什么不重要,知道单词间如何转化即可 [分析] 先理清一下题意: \(n\)个单词,每个单词限用两次 上一个单词能与下一个单词接上,当且仅当上一个单词的末尾 \(k\) 个字符与下一个单 ...

  10. 吴裕雄--天生自然 JAVASCRIPT开发学习: 表单验证

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...