|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
内容概要:
什么是网络爬虫(Web Crawler);urllib包功能;函数.read(),.geturl(),.info(),.getcode()的应用。
0. 网络爬虫(Web Crawler)也叫网络蜘蛛(Web Spider),例如互联网的搜索引擎(百度,谷歌)就是靠大量的WebSpider在互联网上”爬”信息,对网页中的每个关键字建立检索数据库,然后再经过复杂的排序算法后,所”爬”信息的结果会按照搜索关键字相关度的高低被用户检索出来。
1. 使用python编写爬虫,第一个要解决的问题就是:python如何访问互联网。使用python自带的”电池”--- urllib(url + lib)包。
1.1 URL: Uniform Resource Locator,统一资源定位符,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
1.2 URL的一般格式为(带方括号[]的为可选项):
protocol:// hostname[:port] / path / [;parameters][?query]#fragment
例如: http://www.fishc.com:80/dvd/
1.3 URL由三部分组成:
(1) 第一部分是协议:http,https,ftp,file,ed2k…
(2) 第二部分是存放资源的服务器的域名系统或IP地址(有时候要包含端口号,各种传输协议都有默认的端口号,如http的默认端口为80)。
(3) 第三部分是资源的具体地址,如目录或文件名等。
1.4 lib: library资源库
2. urllib包
查找文档可知,
urllib是一个package,它里面包括四个模块,每个模块中包含很多功能函数:
2.1 urllib.request:打开和读取网页
2.2 urllib.error:由urllib.request触发的异常
2.3 urllib.parse:解析URLs
2.4 urllib.robotparser:解析robots.txt files
3. urllib.request模块中的主要函数urlopen(url,data=None)
urllib.request主要功能是实现打开和读取网页,主要涉及到对服务器的请求、发出、跳转、代理和安全等
3.1 形式:urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
3.2 功能:打开网页
3.3 重要参数:
(1)url: 网址,可以是一个字符串(常用)或一个Request对象
★通常用法:response = urllib.request.urlopen("http://placekitten.com/g/200/300")
★也可以:
# 先将字符串转换成Request类的一个对象
req = urllib.request.Request("http://placekitten.com/g/200/300")
# 再打开这个对象
response = urllib.request.urlopen(req)
(2) data: 默认值为None表示打开网址,从服务器获得数据,Request Method:Get;如果不是None,那就是向服务器提供数据,Request Method:POST。
如果POST,data必须要以application/x-www-form-urlencoded的形式提交,可使用函数urllib.parse.urlencode()将字符串转换成所要求的格式。
4. 三个功能函数
response = urllib.request.urlopen("http://placekitten.com/g/200/300")
成功打开网页后,会返回一个对象,与文件对象类似。
可以用read()方法读取内容。
除此之外,还有三个函数可用
4.1 .geturl() — 返回用户的访问地址
4.2 .info() — 返回HTTPMessage对象,包含和用户访问服务器的一些信息。
4.3 .getcode() – 返回HTTP状态码,200表示正常,404表示打开网页失败。
例题:
- # 爬虫第一步,python访问网页
- # 一、&&首先测试打开网页
- # 1.引入urllib包的request模块
- import urllib.request
- #2. 打开网页,返回文件对象
- response1 = urllib.request.urlopen('http://www.fishc.com')
- #3. 读取对象内容
- html1 = response1.read()[code]
复制代码
#4. 打印出来(显示的是二进制类型,很乱)
print(html1)
[/code]
#5. 解码
html2 = html1.decode('utf-8')
#6. 再打印(这样好看一些)
print('\n\n\n\n')- [/code]
- print(html2)
-
- [code]#7 或者把html1保存成txt文本
- with open('E:/python example/html1.txt', 'wb') as f:
- f.write(html1)
- # 打开html.txt查看一下网页的文本形式
复制代码
# 二、&&下面测试.geturl(),.info(),.getcode()
geturl1 = response1.geturl()
info1 = response1.info()
getcode1 = response1.getcode()
print("geturl=", geturl1)
print("info=\n", info1)
print("getcode=", getcode1)
-
- # 三、&& 下面通过访问网站 下载一张图片
- # 随便搜了一个网站打开一个图片网站为:
- # http://photo2.tp88.net/upfile/20173/1/5721D91385D0BE230488F08E6C8B1DA0-0.jpg
- url2 = “http://photo2.tp88.net/upfile/20173/1/5721D91385D0BE230488F08E6C8B1DA0-0.jpg”
- response2 = urllib.request.urlopen(url2)
- girl_img = response2.read()
- with open('E:/python example/girl_0.jpg', 'wb') as f:
- f.write(girl_img)
复制代码
|
|