爬虫笔记(一)——快速使用urllib库
本人以前用的都是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")
此后我们可以将爬取的网页读取出来,常见的读取方式有以下三种:
- read()读取文件的全部内容,与readlines()不同的是,read()会把读取到的内容赋给一个字符串变量。
- readlines()读取文件的全部内容,readlines()会把读取到的内容赋值给一个列表变量。
- 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库的更多相关文章
- python爬虫---从零开始(二)Urllib库
接上文再继续我们的爬虫,这次我们来述说Urllib库 1,什么是Urllib库 Urllib库是python内置的HTTP请求库 urllib.request 请求模块 urllib.error 异常 ...
- 【Python爬虫】HTTP基础和urllib库、requests库的使用
引言: 一个网络爬虫的编写主要可以分为三个部分: 1.获取网页 2.提取信息 3.分析信息 本文主要介绍第一部分,如何用Python内置的库urllib和第三方库requests库来完成网页的获取.阅 ...
- Python爬虫(2):urllib库
爬虫常用库urllib 注:运行环境为PyCharm urllib是Python3内置的HTTP请求库 urllib.request:请求模块 urllib.error:异常处理模块 urllib.p ...
- 爬虫(二):Urllib库详解
什么是Urllib: python内置的HTTP请求库 urllib.request : 请求模块 urllib.error : 异常处理模块 urllib.parse: url解析模块 urllib ...
- 爬虫(三)-之Urllib库的基本使用
什么是Urllib Urllib是python内置的HTTP请求库 包括以下模块 urllib.request 请求模块 urllib.error 异常处理模块 urllib.parse url解 ...
- Python爬虫学习笔记-1.Urllib库
urllib 是python内置的基本库,提供了一系列用于操作URL的功能,我们可以通过它来做一个简单的爬虫. 0X01 基本使用 简单的爬取一个页面: import urllib2 request ...
- 爬虫学习笔记-urllib库
urllib库是python中一个最基本的网络请求库.可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据. urlopen函数:在python3的urllib库中,所有和网络 ...
- Python爬虫实战(一) 使用urllib库爬取拉勾网数据
本笔记写于2020年2月4日.Python版本为3.7.4,编辑器是VS code 主要参考资料有: B站视频av44518113 Python官方文档 PS:如果笔记中有任何错误,欢迎在评论中指出, ...
- python爬虫之urllib库(一)
python爬虫之urllib库(一) urllib库 urllib库是python提供的一种用于操作URL的模块,python2中是urllib和urllib2两个库文件,python3中整合在了u ...
随机推荐
- Jquery获取html标签,包含该标签本身
$(".test").prop("outerHTML"); 原生JS DOM里有一个内置属性 outerHTML,用来获取当前节点的html代码(包含当前节点) ...
- sql同时删除多个表的数据
DELETE语句中指定多个表,根据多个表中的特定条件,从一个表或多个表中删除行. 不过,您不能在一个多表DELETE语句中使用ORDER BY或LIMIT. DELETE t1, t2 FROM t1 ...
- 吴裕雄--天生自然TensorFlow2教程:张量排序
import tensorflow as tf a = tf.random.shuffle(tf.range(5)) a tf.sort(a, direction='DESCENDING') # 返回 ...
- Java算法练习——两数之和
题目链接 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利 ...
- Q3:Longest Substring Without Repeating Characters
3. Longest Substring Without Repeating Characters 官方的链接:3. Longest Substring Without Repeating Chara ...
- MySQL 存储引擎(MyISAM、InnoDB、NDBCluster)
前言 MySQL 的存储引擎可能是所有关系型数据库产品中最具有特色的了,不仅可以同时使用多种存储引擎,而且每种存储引擎和MySQL之间使用插件方式这种非常松的耦合关系. 由于各存储引擎功能特性差异较大 ...
- Tomcat导入工程
Windows->Preference->Server->Runtime environment->Add浏览路径(选择Workbench default JRE)
- pymysql常见报错
错误一: AttributeError: module 'pymysql' has no attribute 'connect' 有道翻译 AttributeError:模块'pymysql'没有属性 ...
- 解决 urxvt “unknown terminal type.”
登录到远程服务器上后,有时执行某些命令会提示unknown terminal type. 这是因为远程ssh不支持urxvt,执行 export TERM=xterm-256color 或者在远程主机 ...
- 题解【[BJOI2012]算不出的等式】
题目背景emmm \[\text{首先特判掉p=q时的情况(ans = }p^2-1\text{)}\] \[\text{构造函数}f(k) = \left\lfloor \frac{kq}{p}\r ...