【Python】爬虫学习

"""
#	urllib:urllib库,它是Python内置的HTTP请求库,也就是说不需要额外安装即可使用。它包含如下4个模块。
#	request:它是最基本的HTTP请求模块,可以用来模拟发送请求。就像在浏览器里输入网址然后回车一样,只需要给库方法传入URL以及额外的参数,就可以模拟实现这个过程了。
#	error:异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作以保证程序不会意外终止。
#	parse:一个工具模块,提供了许多URL处理方法,比如拆分、解析、合并等。
#	robotparser:主要是用来识别网站的robots.txt文件,然后判断哪些网站可以爬,哪些网站不可以爬,它其实用得比较少。
"""
import urllib.request
import urllib.parse
import socket
import urllib.error

"""
#	语法:urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
#	功能:获取网站的信息
#	url:网站的URL地址
#	data:附加数据,data参数是可选的。如果要添加该参数,并且如果它是字节流编码格式的内容,即bytes类型,则需要通过bytes()方法转化。另外,如果传递了这个参数,则它的请求方式就不再是GET方式,而是POST方式。
#	timeout:超时时间
"""
response = urllib.request.urlopen("https://www.python.org")

#	输出返回的网页内容
print(response.read().decode('utf-8'))
#	输出响应的类型:<class 'http.client.HTTPResponse'>
print(type(response))
#	输出响应的状态码,如200代表请求成功,404代表网页未找到等。
print(response.status)
#	输出响应的头信息
print(response.getheaders())
#	输出通过调用getheader()方法并传递一个参数Server获取了响应头中的Server值,结果是nginx,意思是服务器是用Nginx搭建的。
print(response.getheader("Server"))

#	这里我们传递了一个参数word,值是hello。它需要被转码成bytes(字节流)类型。其中转字节流采用了bytes()方法,该方法的第一个参数需要是str(字符串)类型,需要用urllib.parse模块里的urlencode()方法来将参数字典转化为字符串;第二个参数指定编码格式,这里指定为utf8。
data = bytes(urllib.parse.urlencode({"word": "hello"}), encoding = "utf-8")
response_data = urllib.request.urlopen("https://httpbin.org/get", timeout=1)

print(response.read())

try:
	response_timeout = urllib.request.urlopen("https://httpbin.org/get", timeout = 0.1)
except urllib.error.URLError as e:
	if isinstance(e.reason, socket.timeout):
		print("Time Out")


request = urllib.request.Request("https://python.org")
response_request = urllib.request.urlopen(request)
print(response_request.read().decode("utf-8"))

'''
#	利用urlopen()可以实现最基本请求的发起,但这几个简单的参数不足以构建一个完整的请求。
#	如果请求中加入Headers等信息,就可以利用更加强大的Request类来构建
#	class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
#	url:用于请求URL,这是必传参数,其他都是可选参数
#	data:如果data要传,必须传bytes(字节流)类型的。如果它是字典,可以先用urllib.parse模块里的urlencode()编码
#	headers:是一个字典,它是请求头,我们可以在构造请求时通过headers参数直接构造,也可通过调用请求实例的add_header()方法添加
#	添加请求头最常用的方法就是通过修改User-Agent来伪装浏览器,默认的User-Agent时Python-urllib,我们可以通过修改它来伪装浏览器
#	比如伪装火狐浏览器,可把它设置为:Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11
#	origin_req_host:指的是请求方的host名称或者IP地址
#	unverifiable:表示这个请求是否是无法验证的,默认False,意思就是说用户没有足够权限来选择接收这个请求的结果
#	method:是一个字符串,用来指示请求使用的方法,比如GET、POST、和PUT等
'''
url = 'http://httpbin.org/post'
headers = {
    'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
    'Host': 'httpbin.org'
}
dict = {
    'name': 'Germey'
}
data = bytes(parse.urlencode(dict), encoding='utf8')
req = request.Request(url=url, data=data, headers=headers, method='POST')
response = request.urlopen(req)
print(response.read().decode('utf-8'))
上一篇:python 爬虫 urllib库使用


下一篇:Python调用有道api进行翻译