精华内容
下载资源
问答
  • 首先,我建议避免像瘟疫一样使用urllib,而使用requests,它非常容易支持代理:http://docs.python-requests.org/en/latest/user/advanced/#proxies其次,我没有将它用于多线程,而是用于多处理,这非常有效,您唯一...

    首先,我建议避免像瘟疫一样使用urllib,而使用requests,它非常容易支持代理:http://docs.python-requests.org/en/latest/user/advanced/#proxies

    其次,我没有将它用于多线程,而是用于多处理,这非常有效,您唯一需要弄清楚的是,您是否有一个动态队列或一个相当固定的列表,您可以将其分布在workers上,后者将URL列表均匀地分布在x个进程上:# *** prepare multi processing

    nr_processes = 4

    chunksize = int(math.ceil(total_nr_urls / float(nr_processes)))

    procs = []

    # *** start up processes

    for i in range(nr_processes):

    start_row = chunksize * i

    end_row = min(chunksize * (i + 1), total_nr_store)

    p = multiprocessing.Process(

    target=url_loop,

    args=(start_row, end_row, str(i), job_id_input))

    procs.append(p)

    p.start()

    # *** Wait for all worker processes to finish

    for p in procs:

    p.join()

    每个url_循环进程都会将自己的数据集写入数据库中的表中,因此我不必担心在python中将其连接在一起。在

    但正如您所见,基本上这些特殊类型(Value&Array)支持进程之间的数据共享。

    如果您转而寻找一个队列来执行类似循环的过程,那么可以使用JoinableQueue。

    希望这有帮助!在

    展开全文
  • I am trying to use urllib3 in simple thread to fetch several wiki pages.The script willCreate 1 connection for every thread (I don't understand why) and Hang forever.Any tip, advice or simple example ...

    I am trying to use urllib3 in simple thread to fetch several wiki pages.

    The script will

    Create 1 connection for every thread (I don't understand why) and Hang forever.

    Any tip, advice or simple example of urllib3 and threading

    import threadpool

    from urllib3 import connection_from_url

    HTTP_POOL = connection_from_url(url, timeout=10.0, maxsize=10, block=True)

    def fetch(url, fiedls):

    kwargs={'retries':6}

    return HTTP_POOL.get_url(url, fields, **kwargs)

    pool = threadpool.ThreadPool(5)

    requests = threadpool.makeRequests(fetch, iterable)

    [pool.putRequest(req) for req in requests]

    @Lennart's script got this error:

    http://en.wikipedia.org/wiki/2010-11_Premier_LeagueTraceback (most recent call last):

    File "/usr/local/lib/python2.7/dist-packages/threadpool.py", line 156, in run

    http://en.wikipedia.org/wiki/List_of_MythBusters_episodeshttp://en.wikipedia.org/wiki/List_of_Top_Gear_episodes http://en.wikipedia.org/wiki/List_of_Unicode_characters result = request.callable(*request.args, **request.kwds)

    File "crawler.py", line 9, in fetch

    print url, conn.get_url(url)

    AttributeError: 'HTTPConnectionPool' object has no attribute 'get_url'

    Traceback (most recent call last):

    File "/usr/local/lib/python2.7/dist-packages/threadpool.py", line 156, in run

    result = request.callable(*request.args, **request.kwds)

    File "crawler.py", line 9, in fetch

    print url, conn.get_url(url)

    AttributeError: 'HTTPConnectionPool' object has no attribute 'get_url'

    Traceback (most recent call last):

    File "/usr/local/lib/python2.7/dist-packages/threadpool.py", line 156, in run

    result = request.callable(*request.args, **request.kwds)

    File "crawler.py", line 9, in fetch

    print url, conn.get_url(url)

    AttributeError: 'HTTPConnectionPool' object has no attribute 'get_url'

    Traceback (most recent call last):

    File "/usr/local/lib/python2.7/dist-packages/threadpool.py", line 156, in run

    result = request.callable(*request.args, **request.kwds)

    File "crawler.py", line 9, in fetch

    print url, conn.get_url(url)

    AttributeError: 'HTTPConnectionPool' object has no attribute 'get_url'

    After adding import threadpool; import urllib3 and tpool = threadpool.ThreadPool(4) @user318904's code got this error:

    Traceback (most recent call last):

    File "crawler.py", line 21, in

    tpool.map_async(fetch, urls)

    AttributeError: ThreadPool instance has no attribute 'map_async'

    解决方案

    Here is my take, a more current solution using Python3 and concurrent.futures.ThreadPoolExecutor.

    import urllib3

    from concurrent.futures import ThreadPoolExecutor

    urls = ['http://en.wikipedia.org/wiki/2010-11_Premier_League',

    'http://en.wikipedia.org/wiki/List_of_MythBusters_episodes',

    'http://en.wikipedia.org/wiki/List_of_Top_Gear_episodes',

    'http://en.wikipedia.org/wiki/List_of_Unicode_characters',

    ]

    def download(url, cmanager):

    response = cmanager.request('GET', url)

    if response and response.status == 200:

    print("+++++++++ url: " + url)

    print(response.data[:1024])

    connection_mgr = urllib3.PoolManager(maxsize=5)

    thread_pool = ThreadPoolExecutor(5)

    for url in urls:

    thread_pool.submit(download, url, connection_mgr)

    Some remarks

    My code is based on a similar example from the Python Cookbook by Beazley and Jones.

    I particularly like the fact that you only need a standard module besides urllib3.

    The setup is extremely simple, and if you are only going for side-effects in download (like printing, saving to a file, etc.), there is no additional effort in joining the threads.

    If you want something different, ThreadPoolExecutor.submit actually returns whatever download would return, wrapped in a Future.

    I found it helpful to align the number of threads in the thread pool with the number of HTTPConnection's in a connection pool (via maxsize). Otherwise you might encounter (harmless) warnings when all threads try to access the same server (as in the example).

    展开全文
  • urllib和urllib3

    2019-10-18 21:30:35
    urllib和urllib3 一、urllib库 1.1 urllib库所包含的模块 1.2 urlopen方法 二、urllib3

    urllib和urllib3

    一、urllib库

    1.1 urllib库所包含的模块

    在这里插入图片描述
    在这里插入图片描述

    1.2 urlopen方法

    在这里插入图片描述

    1.3 添加请求头

    在这里插入图片描述

    1.4 cookie操作

    在这里插入图片描述

    1.5 代理设置

    在这里插入图片描述

    1.6 response对象

    在这里插入图片描述

    1.7 urllib.parse模块

    在这里插入图片描述
    在这里插入图片描述

    1.8 urllib.error模块

    在这里插入图片描述

    1.9 robotparse模块

    在这里插入图片描述

    二、urllib3库

    2.1 简介

    在这里插入图片描述

    2.2 构造请求

    在这里插入图片描述

    2.3 response属性

    在这里插入图片描述

    2.4 json数据解析

    在这里插入图片描述

    2.5 大数据处理

    在这里插入图片描述

    2.6 代理

    在这里插入图片描述

    2.7 request参数

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    三、爬虫开发的基本流程

    在这里插入图片描述

    四、练习

    在这里插入图片描述

    import urllib3
    import re
    import os
    # 构造请求
    http = urllib3.PoolManager()
    url_list = ["http://www.weimeitupian.com", "http://www.weimeitupian.com/page/2", "http://www.weimeitupian.com/page/3"]
    for i in range(len(url_list)):
        res = http.request("GET", url_list[i])  # 循环发送请求
        res_str = res.data.decode()  # 将响应的数据解码
        print("正在下载第{}页的数据".format(i+1))
        # 匹配创建文件夹时所需要的文本并筛选出所需要的文本
        dir_name = re.findall(r'title="(.+?)"', res_str, re.S)[9:-10]
        # 匹配每个图片的url并筛选出所需要的url
        img_url = re.findall(r'<!--<img src="(.+?)"', res_str, re.S)[:45]
        # print(dir_name, len(dir_name))
        # print(img_url, len(img_url))
        for i in range(len(img_url)):
            try:
                res_img = http.request("GET", img_url[i])
                # res_img = http.request("GET", img_url[i], preload_content=False)  # 分段存储必须要带上preload_content=False
            except Exception as e:
                print("url出错!", e)
                res_img = http.request("GET", "http://www.weimeitupian.com"+img_url[i])
                # res_img = http.request("GET", "http://www.weimeitupian.com" + img_url[i], preload_content=False)
            # 拼接一个路径,用来创建文件夹
            dir_path = os.path.join(r"D:\Python学院学习环境\pachong\img", dir_name[i])
            # 判断该路径是否存在,不存在则创建
            if not os.path.exists(dir_path):
                os.mkdir(dir_path)
            # 拼接一个文件路径
            file_path = os.path.join(dir_path, "{}".format(img_url[i].split("/")[-1]))
            with open(file_path, "wb")as f:
                print("正在下载第{}条数据".format(i+1))
                f.write(res_img.data)
                # for chunk in res_img.stream(32):  # 分段写入,每次写入32个字节
                #     f.write(chunk)
    
    

    效果图
    在这里插入图片描述

    展开全文
  • urllib和urllib3

    2020-12-27 22:10:20
    urllib和urllib3

    urllib

    处理网络请求的python标准库

    四大模块

    请求模块–(request)

    from urllib import request
    
    # request对象
    res = request.Request(url, headers = headers, meth = PUT, timeout = 2)
    req = request.url(req)
    
    # urlopen对象
    req = request.urlopen(url)   
    print(res.read().decode())
    
    urlopen对象  无法添加请求头等参数,使用post请求只需声明参数data
    

    解析模块–操作url

    url中只能包含ascii字符,而参数中可能有汉字

    from urllib import parse
    
    单个参数为汉字
    parse.quote('参数值')      汉字转ascii
    parse.unqutoe('ascii')    ascii 转汉字
    
    多个参数为汉字
    dict = {'wd':'测试', 'code':'1', 'height':'一米八'}
    parse.urlencode(dict)     编码
    parse.parse_qs(dict)      解码    转回字典,value是一个列表格式
    
    

    异常处理模块

    防止个别url请求失败造成程序停止运行

    except是请求失败后执行的代码

    from urllib import error,request
     try:
    	req = request.urlopen(url)
     except error.URLError as e:
        print(e.code)
        print(e.resaon)
        print(e.headers)
        
    

    解析robots.txt文件(暂不介绍)

    from urllib import robotparse
    

    urllib3

    import urllib3
    
    GET请求
    
    parsms = {}
    http = urllib3.PoolManger()
    res = http.request(GET, url, headers = headers, fields = params)
    # 先构造http对象,再用对象进行请求
    
    
    
    POST请求
    
    parsms = {}
    http = urllib3.PoolManger()
    res = http.request(POST, url, headers = headers, fields = params)
    
    
    res.data       查看响应数据
    res.status     查看状态码
    res.headers	   查看headers
    
    注意:field在GET请求中变为参数显示在url中
    	 field在POST请求中变为form表单
    

    json提取

    import json
    json.loads(res.data.encode())
    

    爬虫开发流程

    1. 找到目标数据

    2. 分析请求流程

    3. 构造http请求

    4. 提取数据

    5. 数据持久化

    总结:

    urllib3中响应返回的响应数据为二进制数据,写入为图片时不需要解码
    
    
    
    start_url返回的响应数据,需要经过解码后,才能进行正则匹配
    
    data = res.data.decode('utf-8'),python默认utf-8解码
    
    
    
    re.S     无敌匹配(可以匹配反斜杠)
    
    .*?              ?非贪婪
    
    .*			匹配非     "\\"       数据
    
    展开全文
  • urllib.request---请求模块,用于发起网络请求urllib.parse---解析模块,用于解析URLurllib.error---异常处理模块,用于处理request引起的异常urllib.robotparser robots.tx---用于解析robots.txt文件urllib.request...
  • Python标准库—urllib和urllib3

    万次阅读 2019-06-04 21:04:54
    urllib是Python中请求url连接的官方标准库,在Python2中主要为urllib和urllib2,在Python3中整合成了urllib。urllib中一共有四个模块,分别如下: request:主要负责构造和发起网络请求,定义了适用于在各种复杂情况...
  • 本篇就urllib和urllib3这两种库为大家带来介绍,分析其基本的用法、不同点、使用注意实例,希望能对大家在数据请求的学习有所帮助。1、说明在可供使用的网络库中,urllib和urllib3可能是投入产出比最高的两个。...
  • Python网络请求urllib和urllib3详解urllib是Python中请求url连接的官方标准库,在Python2中主要为urllib和urllib2,在Python3中整合成了urllib。而urllib3则是增加了连接池等功能,两者互相都有补充的部分。urllib...
  • 本篇就urllib和urllib3这两种库为大家带来介绍,分析其基本的用法、不同点、使用注意实例,希望能对大家在数据请求的学习有所帮助。1、说明在可供使用的网络库中,urllib和urllib3可能是投入产出比最高的两个。...
  • 1. 简介urllib是Python中请求url连接的官方标准库,在Python2中主要为urllib和urllib2,在Python3中整合成了urllib。而urllib3则是增加了连接池等功能,两者互相都有补充的部分。2. urlliburllib作为Python的标准库...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,902
精华内容 1,160
关键字:

urllib3和urllib