zoukankan      html  css  js  c++  java
  • 对于python爬虫urllib库的一些理解(抽空更新)

    urllib库是Python中一个最基本的网络请求库。可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据。

    urlopen函数:

    在Python3的urllib库中,所有和网络请求相关的方法,都被集到urllib.request模块下面了,以先来看下urlopen函数基本的使用:

    from urllib import request
    resp = request.urlopen('http://www.baidu.com')
    print(resp.read())
    

    实际上,使用浏览器访问百度,右键查看源代码。你会发现,跟我们刚才打印出来的数据是一模一样的。也就是说,上面的三行代码就已经帮我们把百度的首页的全部代码爬下来了。一个基本的url请求对应的python代码真的非常简单。
    以下对urlopen函数的进行详细讲解:

    url:请求的url。
    data:请求的data,如果设置了这个值,那么将变成post请求。
    返回值:返回值是一个http.client.HTTPResponse对象,这个对象是一个类文件句柄对象。有read(size)、readline、readlines以及getcode等方法。
    urlretrieve函数:
    这个函数可以方便的将网页上的一个文件保存到本地。以下代码可以非常方便的将百度的首页下载到本地:

    from urllib import request
    request.urlretrieve('http://www.baidu.com/','baidu.html')
    

    urlencode函数:

    用浏览器发送请求的时候,如果url中包含了中文或者其他特殊字符,那么浏览器会自动的给我们进行编码。而如果使用代码发送请求,那么就必须手动的进行编码,这时候就应该使用urlencode函数来实现。urlencode可以把字典数据转换为URL编码的数据。示例代码如下:

    from urllib import parse
    data = {'name':'爬虫基础','greet':'hello world','age':100}
    qs = parse.urlencode(data)
    print(qs)
    

    parse_qs函数:

    可以将经过编码后的url参数进行解码。示例代码如下:

    from urllib import parse
    qs = "name=%E7%88%AC%E8%99%AB%E5%9F%BA%E7%A1%80&greet=hello+world&age=100"
    print(parse.parse_qs(qs))
    

    urlparse和urlsplit:

    有时候拿到一个url,想要对这个url中的各个组成部分进行分割,那么这时候就可以使用urlparse或者是urlsplit来进行分割。示例代码如下:

    from urllib import request,parse
    
    url = 'http://www.baidu.com/s?username=zhiliao'
    
    result = parse.urlsplit(url)
    # result = parse.urlparse(url)
    
    print('scheme:',result.scheme)
    print('netloc:',result.netloc)
    print('path:',result.path)
    print('query:',result.query)
    

    urlparseurlsplit基本上是一模一样的。唯一不一样的地方是,urlparse里面多了一个params属性,而urlsplit没有这个params属性。比如有一个url为:url = 'http://www.baidu.com/s;hello?wd=python&username=abc#1'
    那么urlparse可以获取到hello,而urlsplit不可以获取到。url中的params也用得比较少。

    request.Request类:

    如果想要在请求的时候增加一些请求头,那么就必须使用request.Request类来实现。比如要增加一个User-Agent,示例代码如下:

    from urllib import request
    
    headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'
    }
    req = request.Request("http://www.baidu.com/",headers=headers)
    resp = request.urlopen(req)
    print(resp.read())
    

    欢迎补充!!!

  • 相关阅读:
    leetcode231 2的幂 leetcode342 4的幂 leetcode326 3的幂
    leetcode300. Longest Increasing Subsequence 最长递增子序列 、674. Longest Continuous Increasing Subsequence
    leetcode64. Minimum Path Sum
    leetcode 20 括号匹配
    算法题待做
    leetcode 121. Best Time to Buy and Sell Stock 、122.Best Time to Buy and Sell Stock II 、309. Best Time to Buy and Sell Stock with Cooldown 、714. Best Time to Buy and Sell Stock with Transaction Fee
    rand7生成rand10,rand1生成rand6,rand2生成rand5(包含了rand2生成rand3)
    依图
    leetcode 1.Two Sum 、167. Two Sum II
    从分类,排序,top-k多个方面对推荐算法稳定性的评价
  • 原文地址:https://www.cnblogs.com/linwene/p/10068370.html
Copyright © 2011-2022 走看看