本人以前用的都是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. bash: java: command not found

    [root@izm5eab8t820b79js38tbxz ~]# java -version -bash: java: command not found 出现上面问题,解决方法: [root@iz ...

  2. HashMap核心功能源码浅析

    1.引子 "HashMap"由“hash”和“map"两个单词组成,这里的”map"表示“映射”而不是“地图”的意思,两个单词连起来就是“哈希映射表”.Map是 ...

  3. tensorflow笔记2(北大网课实战)

    1.正则化缓解过拟合 正则化在损失函数中引入模型复杂度指标,利用给w加权值,弱化了训练数据的噪声 一般不会正则化b. 2.matplotlib.pyplot 3.搭建模块化的神经网络八股: 前向传播就 ...

  4. tensorflow---darknet53

    #! /usr/bin/env python# coding=utf-8#=============================================================== ...

  5. AJAX(阿贾克斯)的简单应用

    1.ajax 对象的属性说明(常用的) (1)open(method,url,boolean);创建请求,method :填请求类型(get post),url :请求的地址, boolean:tru ...

  6. map/vector遍历删除

    map遍历删除 map<int, vector<int>>::iterator it = g_map.begin(); for (; it != g_map.end(); /* ...

  7. vmbox 导入虚拟电脑之后无法上网

    先执行 ip addr 查看有没有分配ip 用root执行dhclient -v命令去通过DHCP协议获取一个ip,在下图的最后一行可以看到ip已经分配成功dhclient命令可以用来释放你的电脑的I ...

  8. 查找ARP攻击源

    问题: 内网有电脑中了ARP病毒,但是网络拓扑比较复杂.电脑数量较多,排查起来很困难.有什么方法可以找出ARP攻击源?[推荐3]排查方法: 1.使用Sniffer抓包.在网络内任意一台主机上运行抓包软 ...

  9. frp内网穿透,centos7+frp成功样例

    准备工作: 阿里云服务器一台,备案域名一个,本地服务器一台(本人用的虚拟机centos7) frp文件:frp_0.22.0_linux_amd64.tar.gz 链接:https://pan.bai ...

  10. 01Java-方法

    一:动手动脑 1.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数 package reserve; import java.util.Scanner; import java.ut ...