网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。其本质就是利用脚本发送请求,解析响应,然后提取有用信息,最后保存下来。
python由于语法简单,可用的包/库/模块也多,即使是初学者也能够快速实现简单的网络爬虫,给人很大鼓舞和学下去的动力。今天,小编来总结一下关于网络爬虫的模块(依据python2)。
一,标准库中的urllib模块
urllib.urlopen方法:传入一个url链接,用于打开该链接。
urllib.urlencode方法:参数是词典,它可以将key-value这样的键值对转换成我们想要的格式,将URL中的键值对以连接符&划分
urllib.quote方法:只想对一个字符串进行urlencode转换的时候
urllib.urlretrieve方法:传入一个url链接,适用单纯的只下载的功能
二,标准库中的urllib2模块
也是标准库中用于访问网络的模块,不过与上面的urllib模块有区别:
urllib2.urlopen方法:可以接受一个Request对象或者url
urlencode,urllib2没有urlencode方法
urllib2.Request(url[, data][, headers][, originreqhost][, unverifiable])类:是一个抽象的URL请求
urllib2.installopener(opener)和urllib2.buildopener([handler, ...]) 方法:这两个方法一般是一起用的,installopener 实例化会得到OpenerDirector 对象用来赋予全局变量opener。如果想用这个opener来调用urlopen,那么就必须实例化得到OpenerDirector;这样就可以简单 的调用OpenerDirector.open()来代替urlopen()。build_opener实例化也会得到 OpenerDirector对象,其中参数handlers可以被BaseHandler或他的子类实例化。子类中可以通过以下实例化:ProxyHandler (这个用于代理,会经常用到), UnknownHandler, HTTPHandler, HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler, HTTPErrorProcessor。
三,第三方的requests模块
它是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,使用比标准库的urllib模块方便简单。
requests.get(url):发送get请求
requests.post(url,data={'key':'value'}):发送post请求
requests.get(url).text:使用text响应内容,会自动推测响应的编码 #post请求也一样
requests.get(url).content:使用content响应内容,是以二进制响应内容 #post请求也一样
requests.get(url).json():JSON 响应内容,会解析json数据 #post请求也一样
requests.get(url).raw:使用raw响应内容,获取来自服务器的原始套接字响应 #post请求也一样
requests.get(url,headers=headers):定制请求头,其中headers={'user-agent':'my-app/0.0.1'}
四,标准库的httplib模块
httplib实现了HTTP和HTTPS的客户端协议,这个是底层的模块,是urllib等模块的基础,一般比较少直接用到。
httplib.HTTPConnection(host[, port[, strict[, timeout]]])类:用于创建一个http类型的请求链接对象
conn.request(method, url[, body[, headers]])方法:用于发送请求,其中conn是HTTPConnection的实例
conn.getresponse()方法:用于获取一个http响应对象,其中conn是HTTPConnection的实例
conn.close()方法:用于关闭指定的http连接,其中conn是HTTPConnection的实例
res.read([amt])方法:用于获得http响应的内容部分,即网页源码,其中res是HTTPResponse的实列