精华内容
下载资源
问答
  • 网络数据采集之urllib库 一、urllib urllib简介 urllib是python中一个功能强大用于操作URL,并在爬虫时经常用到的一个基础,无需额外安装,默认已经安装到python中。 官方文档地址:请点击这里 urllib的四个子模块...

    网络数据采集之urllib库

    一、urllib

    urllib简介

    urllib是python中一个功能强大用于操作URL,并在爬虫时经常用到的一个基础库,无需额外安装,默认已经安装到python中。

    官方文档地址:请点击这里

    urllib的四个子模块

    Python中urllib库包括以下四个子模块,urllib库是python的内置HTTP请求库,urllib库是一个运用于URL的包(urllib is a package that collects several modules for working with URLs)

    • urllib.request: 请求模块。用于访问和读取URLS(urllib.request for opening and reading URLs),就像在浏览器里输入网址然后回车一样,只需要给这个库方法传入URL和其他参数就可以模拟实现这个过程。
    • urllib.error :异常处理模块。包括了所有urllib.request导致的异常(urllib.error containing the exceptions raised by urllib.request),我们可以捕捉这些异常,然后进行重试或者其他操作以确保程序不会意外终止。
    • urllib.parse:解析模块。用于解析URLS(urllib.parse for parsing URLs),提供了很多URL处理方法,比如拆分、解析、合并、编码。
    • urllib.robotparser:robots.txt解析模块。用于解析robots.txt文件(urllib.robotparser for parsing robots.txt files),然后判断哪些网站可以爬,哪些网站不可以爬。

    使用urllib打开网页

    最基本的方法打开网页—urlopen
    urlopen进行简单的网站请求,不支持复杂功能如验证、cookie和其他HTTP高级功能,若要支持这些功能必须使用build_opener()函数返回的OpenerDirector对象。

    # 最基本的方法打开网页
    from urllib.request import urlopen
    
    # 通过get方法请求url
    with urlopen("http://www.baidu.com") as f:
    	# 默认返回的页面类型是bytes类型,bytes类型转换为字符串,decode方法
    	print(f.read(300).decode('utf-8')
    
    

    携带data参数打开网页

    # 携带data参数打开网页
    from urllib.parse import urlencode
    from urllib.request import urlopen
    
    data = bytes(urlencode({'word': 'hello'}), encoding='utf-8')
    response = urlopen('http://httpbin.org/post', data=data)
    print(response.read().decode('utf-8'))
    

    User-Agent伪装后请求网站

    很多网站为了防止程序爬虫爬网站照成网站瘫痪,会需要携带一些headers头部信息才能访问, 我们可以通过urllib.request.Request对象指定请求头部信息。

    User-Agent = 'Mozilla/4.0(compatibe;MSIE 5.5;Windows NT)'
    # 封装请求头部信息,模拟浏览器向服务器发起请求
    request = Request("http://httpbin.org/post", headers={'User-Agent':User-Agent})
    with urlopen(request) as f:
    	# 默认返回的页面信息是bytes类型,bytes类型转换为字符串用decode方法
    	print(f.read(300).decode('utf-8'))
    

    通过构建Request打开网页

    from urllib.request import Request
    from urllib.request import urlopen
    from urllib.parse import urlencode
    
    url = 'http://httpbin.org/post'
    headers = {
        'User-Agent': 'Mozilla/4.0(compatibe;MSIE 5.5;Windows NT)',
        'Host': 'httpbin.org'
    }
    dict = {'name': 'Germey'}
    data = bytes(urlencode(dict), encoding='utf8')
    req = Request(url=url, data=data, headers=headers, method='POST')
    response = urlopen(req)
    print(response.read().decode('utf-8'))
    

    网络数据采集之requests库

    requests官方网址:点击这里
    Requests is an elegant and simple HTTP library for Python, built for human beings.
    相比较urllib模块,requests模块要简单很多,但是需要单独安装:

    • linux系统下的安装: pip install requests

    requests库的八大主要方法:

    方法描述
    requests.request( )构造一个请求,支持以下各种方法
    requests.get( )向html页面提交get请求的方法,对应于HTTP的GET
    requests.post( )向html页面提交post请求的方法,对应于HTTP的POST
    requests.head( )获取html头部信息的主要方法,对应于HTTP的HEAD
    requests.put( )向html网页提交put请求的方法,对应于HTTP的PUT
    requests.options( )向html页面提交options请求的方法,对应于HTTP的OPTIONS
    requests.patch( )向html网页提交局部修改的请求,对应于HTTP的PATCH
    requests.delete( )向html网页提交删除的请求,对应于HTTP的DELETE

    请求之后,服务器通过response返回数据,Response对象包含服务器返回的所有信息,也包含请求的Request信息。

    response具体参数如下图:

    属性说明
    r.status_codeHTTP请求的返回状态,200表示成功,404表示失败
    r.textHTTP响应内容的字符串形式,即url对应的页面内容
    r.content( )HTTP响应内容的二进制形式
    r.encoding从HTTP header中猜测响应内容的编码格式
    r.apparent_encoding从内容中分析出响应内容的编码格式(备选编码格式)

    防止反爬1:添加headers–UserAgent

    有些网站访问时必须带有浏览器等信息,如果不传入headers就会报错。

    UserAgent是识别浏览器的一串字符串,相当于浏览器的身份证,在利用爬虫爬取网站数据时,频繁更换UserAgent可以避免触发相应的反爬机制。fake-useragent对频繁更换UserAgent提供了很好的支持,可谓防反爬利器。

    # 首先导入UserAgent:
    from fake_useragent import UserAgent
    
    def add_headers():
    	user_agent = UserAgent().random
    	# 将请求头部添加到
    	response = requests.get('http://127.0.0.1:5000', headers={'User-Agent':user_agent})
    	print(response)
    
    if __name__ == '__main__':
        add_headers()
    
    

    防止反爬2:IP代理设置–proxies

    在进行爬虫爬取时,有时候爬虫会被服务器屏蔽掉,这时候采用的方法主要有降低访问时间,通过代理IP访问。IP可以从网上抓取,或者某宝购买。

    proxies = { "http": "http://127.0.0.1:9743", "https": "https://127.0.0.1:9743",}
     response = requests.get(url, proxies=proxies)
    

    useragent和IP代理的结合使用:

    import requests
    from fake_useragent import UserAgent
    
    us = UserAgent()
    proxies = {
        'http':'http://163.125.75.233:9797',
        'https':'https://182.92.220.212:8000'
    }
    
    response = requests.get('http://47.92.255.98:8000',
                            headers={'User-Agent':us.random},
                            proxies=proxies)
    print(response)
    print(response.text)
    

    爬虫应用小案例

    京东商品信息爬取:

    from urllib.error import HTTPError
    
    import requests
    from colorama import Fore
    from fake_useragent import UserAgent
    
    def down_page(url, params=None):
        try:
            ua = UserAgent()
            headers = {'User-Agent':ua.random}
            response = requests.get(url, params, headers=headers)
        except HTTPError as e:
            print(Fore.RED + '[-] 爬取网站%s失败:%s' %(url, e.reason))
            return None
        else:
            return response.content
    
    def down_file(content=b'', filename='hello.html'):
        with open(filename, 'wb') as f:
            f.write(content)
            print(Fore.GREEN + '[+]写入文件%s成功' %(filename))
    
    if __name__ == '__main__':
        url = 'https://item.jd.com/100012015170.html'
        html = down_page(url)
        down_file(content=html)
    

    360搜索关键字提交

    from urllib.error import HTTPError
    
    import requests
    from colorama import Fore
    from fake_useragent import UserAgent
    
    def down_page(url, params):
        try:
            ua = UserAgent()
            headers = {
                'User-Agent':ua.random
            }
            response = requests.get(url, params, headers=headers)
        except HTTPError as e:
            print(Fore.RED + '[-]爬取网页%s失败:%s' %(url, e.reason))
            return None
        else:
            return response.content  # 二进制文件
    
    def down_file(content=b'',filename='python.html'):
        with open(filename, 'wb') as f:
            f.write(content)
            print(Fore.GREEN + '[+]关键字写入文件%s成功......'%(filename))
    
    if __name__ == '__main__':
        url = 'https://www.so.com/s'
        params = {
            'q' : 'python'
        }
        down_file(content = down_page(url, params))
    

    response = requests.get(url, params, headers=headers) 这里参数会自动填入访问的url网页,进行关键字查询。

    展开全文
  • 文章目录一.urllib库基本介绍二.urllib.request 请求模块1.urlopen方法参数解析1.1....设置代理服务器五.requests库1.requests库常用类:2.requests库的请求函数3.返回响应Response的常用属性 一.url

    一.urllib库基本介绍

    urllib库是python内置的HTTP请求库,它可以看作处理URL的组件集合。urllib库包含三大组件:   
    	1.urllib.request 请求模块
        2.urllib.error 异常处理模块
        3.urllib.parse URL解析模块
        4.urllib.robotparser robots.txt解析模块
    

    注意:python2使用的是urllib2模块,python3出现后,之前的python2中的urllib2模块被
    移植到了urllib.request模块中了,之前的urllib中的函数的路径也发生了改变

    二.urllib.request 请求模块

    1.urlopen方法参数解析

    urlopen方法用于向指定URL发送get请求或者post请求

               def urlopen(
               url,     	   #url参数,标识目标网站中的位置,表示url地址
               data=None,      #1.用来指明向服务器发送请求的额外信息 http协议是唯一支持data参数的协议
                                data默认是None,此时发送的时get请求;当设置参数时,需要使用post请求
                                2.使用urllib.parse.urlencode()方法将data转换为标准格式,而这个参数接收
                                的类型是键值对类型
                                3.data必须是一个bytes对象
    
               timeout=socket._GLOBAL_DEFAULT_TIMEOUT,*,      #可选参数,用于设置超时时间,单位秒
    
               cafile=None,capath=None,cadefault=False, #这三个参数用于实现CA证书的HTTPS请求,很少使用
               context=None #实现ssl加密传输,很少使用
               )
    

    1.1.发送get请求

    from urllib import request,parse
    # 使用urlopen方法向url方式请求
    response = request.urlopen("https://www.baidu.com/")
    # 使用read() 方法读取到页面内容,使用decode()方法解码 utf-8
    html = response.read().decode('utf-8')
    # 打印结果
    print(html)
    

    1.2.发送post请求(设置data参数)

    如果设置data参数那么请求方式会改为post,默认是get请求。这两种请求方式最大的区别在于:get方式直接使用URL访问,在URL中包含了所有的参数;post方式则不会在URL中显示所有的参数,参数包含在请求体中,会更加安全。

    注意:1.需要使用urllib.parse.urlencode(data)将data转换为标准格式
    2.data必须是一个bytes对象

    from urllib import request,parse
    # data参数使用,使用data参数,那么就是post请求 encode('utf-8'))使用utf-8编码方式
    data = bytes(parse.urlencode({'world':'hello'}).encode('utf-8'))
    #http://httpbin.org/ 是一个简单的HTTP请求和响应服务。
    #这里发送的就是post请求
    response2 = request.urlopen("http://httpbin.org/post",data=data)
    # 这里需要用utf-8编码解码
    html2 = response2.read().decode('utf-8')
    print(html)
    

    1.3.设置timeout参数

    该参数用于设置超时时间,单位是秒

    from urllib import request,parse
    # timeout参数使用,超时时间设置成一秒
    response3 = request.urlopen("https://www.baidu.com/",timeout=1)
    html3 = response3.read()
    

    1.4.HTTPResponse对象

    使用上述urlopen方法发送http请求后,服务器返回的响应内容会封装在一个HTTPResponse对象中,如下代码演示:

    from urllib import request
    # 传入URL构造出Request对象
    url = request.Request("https://www.baidu.com/")
    response = request.urlopen(url)
    print(type(response)) 
    #输出结果:<class 'http.client.HTTPResponse'>
    

    HTTPResponse类提供了URL,状态码,响应内容等方法,常见方法如下:

    方法名解释
    geturl()获取当前请求的URL
    info()返回页面元信息
    getcode()返回响应码

    代码演示

    from urllib import request
    # 传入URL构造出Request对象
    url = request.Request("https://www.baidu.com/")
    response = request.urlopen(url)
    # print(type(response)) #<class 'http.client.HTTPResponse'>
    # 获取当前请求的URL
    print(response.geturl())
    #返回页面元信息
    print(response.info())
    # 返回状态码
    print(response.getcode())
    

    输出结果
    在这里插入图片描述

    2.构造Request对象

    细心的朋友已经发现,urlopen()方法没有接收header的参数,如果需要添加HTTP报头,这时就需要用到Request对象
    下面是Request的构造方法

    class Request:
        def __init__(self, url, data=None, headers={},
                     origin_req_host=None, unverifiable=False,
                     method=None):
    

    我们可以将url,data,headers等参数传入构造方法,构建一个Request对象
    下面是爬虫百度翻译的案例

    from urllib import request, parse
    
    url = "https://fanyi.baidu.com/sug"
    header = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
    }
    fromdata = {
    	# 待翻译的英语单词
        "kw": "China"
    }
    # 构建data对象
    data = bytes(parse.urlencode(fromdata).encode("utf-8"))
    # # 构建Request对象
    request1 = request.Request(url=url, headers=header, data=data)
    responce = request.urlopen(request1)
    # 将Unicode编码转换成中文
    html = responce.read().decode("unicode-escape")
    print(html)
    

    输出结果
    在这里插入图片描述
    *

    三.urllib.parse URL解析模块

    URL编码转换,就是将中文或者其他特殊符号转换成URL编码(URL encoding),这个编码也称作百分号编码(Percent-encoding), 是特定上下文的统一资源定位符 (URL)的编码机制
    URL编码和解码实例代码

    from urllib import parse
    data = {
        "a": "爬虫",
    }
    # 按照UrlEncode对data进行编码
    result = parse.urlencode(data) #a=%E7%88%AC%E8%99%AB
    print(result)
    # 对该编码进行解码
    result2 = parse.unquote(result)
    print(result2)
    

    输出结果
    在这里插入图片描述

    四.代理服务器

    很多网站会检测某一段时间某个IP的访问次数,如果同一IP访问过于频繁,那么该网站会禁止该IP的访问。针对这种情况,可以使用代理服务器,每隔一段时间换一个代理。如果某个IP被禁,可以换成其他IP继续爬取从而有效解决网站禁止访问的情况;代理多用于防止“反爬虫”机制。

    1.使用自定义opener对象发送请求

    前面我们一直使用的是urlopen方法发送请求,其实这也是一个opener。但是urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能,如果需要用到这些高级功能,这时就需要自定义opener了。
    构建opener对象实例代码

    from urllib import request
    # 构建一个HTTPHandler处理器对象,支持处理HTTP请求
    http_handler = request.HTTPHandler()
    # 创建支持处理HTTP请求的opener对象
    '''
    从处理程序列表创建opener对象。
    opener将使用几个默认处理程序,包括支持
    适用于HTTP、FTP和HTTPS。
    如果作为参数传递的任何处理程序是
    默认处理程序,将不使用默认处理程序。
    '''
    opener = request.build_opener(http_handler)
    # 构建Request请求
    res = request.Request("https://www.baidu.com/")
    # 使用指定要的opener对象的open方法,发送request请求
    response = opener.open(res)
    print(response.read().decode("utf-8"))
    

    2.设置代理服务器

    我们可以使用urllib.request中的ProxyHandler()方法来设置代理服务器

    from urllib import request
    #构建两个代理Handler,一个有代理IP,一个没有代理IP
    httpProxy_handler = request.ProxyHandler({"http":"192.168.220.13:80"})
    nullProxt_handler = request.ProxyHandler()
    #设置一个代理开关
    proxy_loop = True
    # 根据代理开关是否打开,使用不同的代理
    if proxy_loop:
        opener = request.build_opener(httpProxy_handler)
    else:
        opener = request.build_opener(nullProxt_handler)
    response = opener.open("https://www.baidu.com/")
    print(response.read().decode("utf-8"))
    

    五.requests库

    requests库是基于python开发的HTTP库,与urllib标准库相比,代码要简洁。实际上,requests库是在urllib的基础上进行了高度封装,它不仅继承了urllib库的所有特性,而且还支持Cookie保存会话,自动确定响应内容的编码等。

    1.requests库常用类:

    解释
    requests.Request表示请求对象,用于将一个请求发送到服务器
    requests.Response表示响应对象,其中包含服务器对HTTP请求的响应
    requests.Session表示请求会话,提供Cookie持久性,连接池和配置

    2.requests库的请求函数

    函数功能说明
    requests.request()构造一个请求,支持以下各方法的基础方法
    requests.get()请求指定页面信息,并返回实体主体
    requests.post()向指定资源提交数据进行处理请求(如提交表单或者上传文件),数据包含在请求体中。post请求可能会导致新的资源的建立和已有资源的修改
    requests.head()类似于get请求,只不过返回的响应中没有具体内容,用于获取报头
    requests.put()这种请求方式下,从客户端向服务器传送的数据取代指定的文档内容
    requests.delete()请求指定服务器删除指定页面
    requests.patch()向HTML网页提交局部修改请求

    3.返回响应

    Response类用于动态的响应客户端的请求,控制发送给用户的信息,并且将动态地生成响应,包括状态码,网页的内容等

    Response的常用属性

    属性说明
    status_codeHTTP请求的返回状态,200代表连接成功,404表示失败
    textHTTP响应内容的字符串形式,即URL对应的页面内容
    encoding从HTTP请求头中猜测的响应内容编码方式
    apparent_encoding从内容中分析出响应编码方式(备选编码方式)
    contentHTTP响应的二进制形式

    Response类会自动解码来自服务器的内容,并且大多数的Unicode字符集都可以被无缝地解码。
    代码示例,你会发现requests库比urllib库简单好多

    import requests
    
    url = "https://www.baidu.com/"
    response = requests.get(url)
    #以字符串的形式返回
    print(response.text)
    # 查看文本编码
    print(response.encoding)
    # 查看响应码
    print(response.status_code)
    

    输出结果
    在这里插入图片描述

    展开全文
  • urllib库requests库

    2019-12-04 11:49:57
    urllib url="http://category.dangdang.com/pg1-cid4008154.html" import urllib.request headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chro...

    同样是爬某网站的商品标题

    urllib

    url="http://category.dangdang.com/pg1-cid4008154.html"
    import urllib.request
    headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
            "Content-Type":"application/javascript",
             }
      ##############################################################
    opener=urllib.request.build_opener()
    headall=[]
    for key,value in headers.items():
        item=(key,value)
        headall.append(item)
    opener.addheaders=headall
    urllib.request.install_opener(opener) 
    data=urllib.request.urlopen(url).read().decode("gbk")
      ##############################################################
    from lxml import etree
    html = etree.HTML(data)
    href_list = html.xpath("//a[@name='itemlist-picture']/@title")
    href_list
    

    requests

    url="http://category.dangdang.com/pg1-cid4008154.html"
    import requests
    headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
            "Content-Type":"application/javascript",
             }
      ##############################################################
    r=requests.get(url,headers=headers)
    html = r.content.decode('gbk')
      ##############################################################
    from lxml import etree
    html = etree.HTML(html)
    href_list = html.xpath("//a[@name='itemlist-picture']/@title")
    href_list[0:10]
    

    输出

    [' Lily冬粉紫韩版直筒中长款双面呢大衣羊毛大衣女',
     ' Lily春秋新款女装纯色直筒毛呢大衣中长款毛呢大衣117410F1556',
     ' 【1件3折!限时购!到手价:126元】裂帛2019春新款时尚圆领绣花休闲甜美风清新韩版学生长袖卫衣女',
     ' 【到手价449元】加厚女羽绒面包服秋冬季新款韩版学生小棉袄短款外套棉衣',
     ' 【到手价299元】百搭羊羔毛外套女新款小个子呢子韩版短款毛呢外套女学生',
     ' 【2.5折价:79.75元/叠加40元券】茵曼秋装新款连帽印花抽绳宽松休闲运动长袖卫衣女【1883082079】',
     ' Lily春新款女装商务通勤OL深宝蓝拉链毛呢外套117420F1543',
     ' 【领券下单立减120元】Amii韩版ins高领加厚加绒卫衣女2019秋冬新款宽松印花长袖上衣',
     ' 【明星同款】Lily2018冬新款直筒人字纹双面呢长款大衣118419F1901',
     ' 【到手价149元】长袖运动服女新款韩版学生宽松时尚bf短款拉夏贝尔情侣外套']
    
    展开全文
  • 个人学习收藏,侵删 -------------------------------------------------------------------...我们在使用python爬虫时,需要模拟发起网络请求,主要用到的requests库和python内置的urllib库,一般建议使用reques

    原文链接:https://blog.csdn.net/sinat_37967865/article/details/85392207

    个人学习收藏,侵删

    -------------------------------------------------------------------------------------------------------

    我们在使用python爬虫时,需要模拟发起网络请求,主要用到的库有requests库和python内置的urllib库,一般建议使用requests,它是对urllib的再次封装,它们使用的主要区别:
    requests可以直接构建常用的get和post请求并发起,urllib一般要先构建get或者post请求,然后再发起请求。

    import requests
     
    Response_get = requests.get(url, params=None, **kwargs)
    Response_post = requests.post(url, data=None, json=None, **kwargs)


    上面请求后得到的是requests.models.Response对象,需要处理后才能得到我们需要的信息
    Response_get.text 得到的是str类型
    Response_get.content 得到的是bytes类型,需要进行解码Response_get.content.decode(),相当于Response_get.text
    Response_get.json() 得到的是JSON数据类型

    一般我们最简单的get请求是requests.get(url),但是我们可以对请求进行定制,比如requests.get(url,headers=headers)
    headers里面可以定制User-Agent和cookie
    简单的post请求是requests.post(url),我们也可以requests.post(url,data),其中data可以是列表,字典,JSON等类型

    import urllib.request
     
    req = urllib.request.Request(self, url, data=None, headers={},origin_req_host=None,unverifiable=False,method=None)
    Response_request = urllib.request.urlopen(req)
    Response = urllib.request.urlopen(url, data=None, timeout=1, cafile=None, capath=None, cadefault=False, context=None)


    urllib.request 模块提供了最基本的构造 HTTP 请求的方法,利用它可以模拟浏览器的一个请求发起过程。
    # 同时它还带有处理 authenticaton (授权验证), redirections (重定向), cookies (浏览器Cookies)以及其它内容。
    # context 参数,它必须是 ssl.SSLContext 类型,用来指定 SSL 设置。cafile 和 capath 两个参数是指定CA证书和它的路径,这个在请求 HTTPS 链接时会有用。
    # cadefault 参数现在已经弃用了,默认为 False 。
    # 它是一个 HTTPResposne 类型的对象,它主要包含的方法有 read() 、 readinto() 、getheader(name) 、 getheaders() 、 fileno() 等函数
    # 和 msg 、 version 、 status 、 reason 、 debuglevel 、 closed 等属性。 得到这个对象之后,赋值为 response ,
    # 然后就可以用 response 调用这些方法和属性,得到返回结果的一系列信息。
    # 例如 response.read() 就可以得到返回的网页内容, response.status 就可以得到返回结果的状态码,如200代表请求成功,404代表网页未找到等。

    简单的get请求是urllib.request.urlopen(url),其中url可以是一个链接,也可以是一个请求,
    所以我们定制请求头需要通过urllib.request.Request(url,headers=headers)进行定制,然后当成url传入到request.urlopen()

    下面是两个库的简单使用方法:

    import requests
    import urllib.request
     
     
    url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
    api ='http://open.iciba.com/dsapi/'
    headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'
        }
    form_data = {
        "i": "word",
        "from": "AUTO",
        "to": "AUTO",
        "smartresult": "dict",
        "doctype": "json",
        "version": "2.1",
        "keyfrom": "fanyi.web",
        "action": "FY_BY_REALTIME",
        "typoResult": "false"
    }
     
     
    req1 = requests.get(url,headers=headers)
    req_api = requests.get(api,headers=headers)
    print(type(req1),type(req1.text),req1.text)              # requests.get().text是str类型
    print("字符串",type(req1.content),req1.content)           # requests.get().content是bytes类型
    print("与直接req1.text一致",req1.content.decode())
    print("接口返回json格式",req_api.json())                  # 接口返回格式需要用requests.get().json()
     
     
    # POST发送的data必须为bytes或bytes类型的可迭代对象,不能是字符串
    form_data = urllib.parse.urlencode(form_data).encode()
    # urllib.request.Request()只是一个请求:
    req2 = urllib.request.Request(url,data=form_data,headers=headers)
    print(type(req2))
     
     
    req3 = urllib.request.urlopen(url)      # 不可以伪装你的User Agent,可以通过urllib.request.Request()伪装
    print(type(req3),req3.status)           # http.client.HTTPResponse
    print(req3.getheaders())                # 响应的信息集合
    print(req3.read().decode("utf-8"))      # urllib.request.urlopen().read().decode("utf-8")相当于requests.get().text
     
    req4 = urllib.request.urlopen(req2)     # 参数可以直接是一个请求
    print("直接一个请求:",req4.read().decode("utf-8"))

     

    展开全文
  • requests库 环境:Anaconda3(python3.5) urllib库 使用urllib构建一个请求响应模型 import urllib strUrl=&amp;amp;amp;quot;https://www.baidu.com/&amp;amp;amp;quot; response=urllib.request...
  • 使用urllib urllib3 resquests GET 网页源代码 简单介绍扩展re beautifulsoup
  • 【Python爬虫】requestsurllib库的区别

    万次阅读 多人点赞 2018-12-30 16:14:50
    我们在使用python爬虫时,需要模拟发起网络请求,主要用到的requests库和python内置的urllib库,一般建议使用requests,它是对urllib的再次封装,它们使用的主要区别: requests可以直接构建常用的getpost请求...
  • urllib库requests库爬虫

    千次阅读 2020-04-05 21:23:35
    首先介绍urllib库爬取网页内容。 需要lxml,urllib库 以我的博客为例爬取相关资料 import urllib.parse import lxml.html import urllib.request import time url='...
  • from urllib import request, parse, error import urllib try: response = urllib.request.urlopen('https://a.com') print(response.status) except error.HTTPError as e: print(e.reason,e.code,e.Headers,...
  • import requests from requests.packages import urllib3 urllib3.disable_warnings() response = requests.get("https://www.12306.cn",verify=False) print(response.status_code)
  • 一、认识requests和urllib工具 二、urllib的具体使用 1.urllib的request模块的urlopen方法可以发送http请求,具体使用: 2.使用response.read()可以获得响应体的内容,具体使用: 3.设置请求头部信息:headers...
  • requests和urllib的区别

    千次阅读 2020-02-02 22:54:35
    requests 一、发送请求 1.发送get请求,例如: r = requests.get('http://httpbin.org/ip') 2.发送post请求,例如: r = requests.post('http://httpbin.org/ip') 3.得到的响应内容(就是指get发送以后的...
  • 我们讲了requests的用法以及利用requests简单爬取、保存网页的方法,这节课我们主要讲urllib和requests的区别。 1、获取网页数据 第一步,引入模块。 两者引入的模块是不一样的,这一点显而易见。 第二步,简单网页...
  • 什么是Urllib? Python内置的HTTP请求urllib.request 请求模块 urllib.error 异常处理模块 urllib.parse url解析...Requests库是用Python语言编写,基于urllib,比urllib更加方便,可以节约大量工作,满足...
  • python3的urllib3和requests

    万次阅读 2018-11-27 18:02:07
    Urllib库 Urllin2 Py3.x: Urllib库 变化: 在Pytho2.x中使用import urllib2——-对应的,在Python3.x中会使用import urllib.request,urllib.error。 在Pytho2.x中使用import urllib——-对应的,在Python3.x中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,323
精华内容 14,929
关键字:

urllib库和requests库