urlib库用于爬虫需要导入两个头文件,其主要使用的方法如下:
import urllib.request
import urllib.parse
#其中urllib主要用到的方法有:
urlopen(url = url ,data = form_data) #用于发送get和post请求
urlretrieve(url,iamge_path)#用于保存图片,第二个参数是图片保存的路径
#urllib.parse用到的方法有:
quote() #将url中的中文字符串转换为%XXX
unquote() #将url中%XXX转换为中文
urlencode() #给定一个字典将拼接为query_string,并实现编码
#query_string就是get请求所带的参数
#拿到请求回应response时一般的方法有:
read() #读取响应内容,字节类型
geturl() #获取请求的url
getheaders() #获取头部信息
getcode() #获取状态码
getline() #按行读取响应内容,返回列表,字节类型
#如果需要伪装头部,需要使用Request()对象
urllib.request.Request(url = url ,headers = headers)
不带参数的get请求:
import urllib.request
import urllib.parse
url = 'http://www.baidu.com'
response= urllib.request.urlopen(url)
with open('baidu.txt','w',encoding = 'utf-8') as f:
f.write(response.read().decode())
带参数的get请求
import urllib.request
import urllib.parse
url = 'https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&'
data={
'start':0,
'limit':2
}#get请求的参数
#将数据data转换为浏览器认识的字符串
query_string = urllib.parse.urlencode(data)
#将data数据拼接在后边url后阿斌形成一个完整的url
url += query_string
print(url)
#发送请求
response = urllib.request.urlopen(url)
#将得到的响应解码
print(response.read().decode())
带参数的post请求:
import urllib.request
import urllib.parse
post_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'
form_data = {
'cname': '北京',
'pid':' ' ,
'pageInde': '3',
'pageSize':'10',
}#post请求数据
headers = {
'user-Agent':' Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11' ,
}#伪装的头部
#修改请求头部信息,伪装是浏览器(构件请求对象)
request=urllib.request.Request(url = post_url,headers = headers)
#将需要post的form_data处理成字节类型,注意后边的encode()
form_data = urllib.parse.urlencode(form_data).encode()
#传入修改的请求信息和post的数据发送请求得到响应
response = urllib.request.urlopen(request,data = form_data)
print(response.read().decode())
如果需要使用cookie或者代理时,则需要使用opener,基本上使用方法一样,示例如下(不推荐使用,不如直接用requests):
import urllib.request
import urllib.parse
url = 'https://www.baidu.com/'
headers = {
'user-Agent':' Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11' ,
}
#创建一个handler
handler = urllib.request.HTTPHandler()
#通过handler创建一个opener
#opener就是一个对象,发送请求使用其方法就行
opener = urllib.request.build_opener(handler)
#构件请求对象
request = urllib.request.Request(url,headers= headers)
#发送请求
response = opener.open(request)
print(response.read().decode())
带cookie
import urllib.request
import urllib.parse
import http.cookiejar#需要cookie的库
#创建一个cookijar对象
cj = http.cookiejar.CookieJar()
#根据cookiejar创建一个handler
handler = urllib.request.HTTPCookieProcessor(cj)
#根据handler创建一个opener
opener = urllib.request.build_opener(handler)
headers = {
'user-Agent':' Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11' ,
}
#创建请求对象
request = urllib.request.Request(post_url , headers = headers)
response =opener.open(request,data = form_data)
带代理
import urllib.request
import urllib.parse
url = 'https://www.baidu.com/'
headers = {
'user-Agent':' Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11' ,
}
#创建一个handler,注意代理方法
handler = urllib.request.ProxyHandler({'http':'127.0.0.1:8888'})
#通过handler创建一个opener
opener = urllib.request.build_opener(handler)
#构件请求对象
request = urllib.request.Request(url,headers= headers)
#发送请求
response = opener.open(request)
print(response.read().decode())
网友评论