美文网首页
爬虫之urllib库(不推荐使用,没requests好用)

爬虫之urllib库(不推荐使用,没requests好用)

作者: IT_小马哥 | 来源:发表于2019-05-20 11:48 被阅读0次

    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())
    

    相关文章

      网友评论

          本文标题:爬虫之urllib库(不推荐使用,没requests好用)

          本文链接:https://www.haomeiwen.com/subject/jpghzqtx.html