鱼C论坛

 找回密码
 立即注册
查看: 1609|回复: 2

[技术交流] 《零基础入门学习Python》笔记 053爬虫1:Python如何访问互联网?

[复制链接]
发表于 2017-9-19 03:14:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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表示打开网页失败。

例题:
  1. # 爬虫第一步,python访问网页
  2. # 一、&&首先测试打开网页
  3. # 1.引入urllib包的request模块
  4. import urllib.request
  5. #2. 打开网页,返回文件对象
  6. response1 = urllib.request.urlopen('http://www.fishc.com')
  7. #3. 读取对象内容
  8. html1 = response1.read()[code]
复制代码

#4. 打印出来(显示的是二进制类型,很乱)
print(html1)
[/code]
53.1.jpg
#5. 解码
html2 = html1.decode('utf-8')
#6. 再打印(这样好看一些)
print('\n\n\n\n')
  1. [/code]
  2. print(html2)
  3. 53.2.jpg
  4. [code]#7 或者把html1保存成txt文本
  5. with open('E:/python example/html1.txt', 'wb') as f:
  6.     f.write(html1)
  7. # 打开html.txt查看一下网页的文本形式
复制代码

53.3.jpg
# 二、&&下面测试.geturl(),.info(),.getcode()
geturl1 = response1.geturl()
info1 = response1.info()
getcode1 = response1.getcode()

print("geturl=", geturl1)
print("info=\n", info1)
print("getcode=", getcode1)

  1. 53.4.jpg
  2. # 三、&& 下面通过访问网站 下载一张图片
  3. # 随便搜了一个网站打开一个图片网站为:
  4. # http://photo2.tp88.net/upfile/20173/1/5721D91385D0BE230488F08E6C8B1DA0-0.jpg
  5. url2 = “http://photo2.tp88.net/upfile/20173/1/5721D91385D0BE230488F08E6C8B1DA0-0.jpg”
  6. response2 = urllib.request.urlopen(url2)
  7. girl_img = response2.read()
  8. with open('E:/python example/girl_0.jpg', 'wb') as f:
  9.     f.write(girl_img)
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-19 15:33:21 | 显示全部楼层
赞一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-28 15:10:58 | 显示全部楼层
赞一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 17:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表