【壹】Python爬虫入门——认识URL

Python016

【壹】Python爬虫入门——认识URL,第1张

【系列前言】前段时间李响同学入门了一些Python的基础知识,觉得一直在IDLE里print一些算法题有一些枯燥,所以决定通过学习爬虫来提高自己的兴趣。而且最近确实有一些重复性劳动,想使用爬虫简化工作。遂打算边自学边写自己自学的过程,一方面作为小白的我可以和其他Python大神交流,一方面也可以以此监督自己。

【本人使用Python版本:2.7.5】

首先按理解一下爬虫(Spider),如果把一个站点比作一张纵横交错的蜘蛛网,那么我们爬虫要做的就是在这张网上爬来爬去,获得这张网上的信息和资源。而Web上每种资源,比如HTML文档、图片、视频等都由一个URI(Universal Resource Identifier,通用资源标志符)进行定位。 URL(Uniform Resource Locator,统一资源定位符)是URI的子集。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。而爬虫主要的处理对象就是URL。所以务必要对URL有一定的熟悉。

URI通常由三部分组成:

1.访问资源的命名机制;

2.存放资源的主机名;

3.资源自身 的名称,由路径表示。

URL的格式由三部分组成:

1.第一部分是协议(或称为服务方式)。

2.第二部分是存有该资源的主机IP地址(有时也包括端口号)。

3.第三部分是主机资源的具体地址,如目录和文件名等。

知乎:HTTP 协议中 URI 和 URL 有什么区别?@西毒 的回答

最近在搞挑战杯可能会有点忙,但还是希望自己能按照计划学习,定期更新此系列。

from urllib import request

import ssl

url = ' http://www.baidu.com/'

"""

url, 请求的目标url地址

data=None,默认情况为None,表示发起的是一个get请求,不为None,则发起的是一个post请求

timeout=,设置请求的超时时间 

cafile=None, 设置证书

capath=None, 设置证书路径

cadefault=False, 是否要使用默认证书(默认为False)

context=None:是一个ssl值,表示忽略ssl认证

"""

content = ssl._create_unverified_context()

response = request.urlopen(url,timeout=10,content=content)

code = response.status

print(code)

b_html = response.read()

print(type(b_html),len(b_html))

res_headers = response.getheaders()

print(res_headers)

cookie_data = response.getheader('Set-Cookie')

print(cookie_data)

reason = response.reason

print(reason)

str_html = b_html.decode('utf-8')

print(type(str_html))

with open('b_baidu.page.html','w') as file:

# file.write(b_html)

file.write(str_html)

"""

url:发起请求的url地址

data=None, 默认情况为None,表示发起的是一个get请求,不为None,则发起的是一个post请求

headers={},设置请求头(headers对应的数据类型是一个字典)

origin_req_host=None, (指定发起请求的域)

unverifiable=False,忽略SSL认证

method=None:指定发起请求的方式

"""

req_header = {

'User-Agent':'Mozilla/5.0 (X11Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'

}

req = request.Request(url,headers=req_header)

response = request.urlopen(req)

response.status

response.read()

response.getheaders()

response.getheader('Server')

response.reason

python2中:对于字符串和bytes类型的数据没有明显的区分

python3中:对于字符串和bytes类型的数据有明显的区分

将bytes类型的数据转换为字符串使用decode('编码类型')

将字符串转换为bytes类型的数据使用encode('编码类型')

bytearray和bytes类型的数据是有区别的:前者是可变的,后者是不可变的