Python 如何设置标题(用户代理)、检索网页、捕获重定向和接受cookie?

Python 如何设置标题(用户代理)、检索网页、捕获重定向和接受cookie?,python,python-3.x,urllib,Python,Python 3.x,Urllib,此代码将返回http://espn.go.com/,这就是我想要的——重定向网站URL。看了Python文档、谷歌搜索等之后,我不知道如何: 捕获重定向的网站URL(已工作) 更改外出请求的用户代理 接受网页可能要发回的任何cookie 在Python3中如何实现这一点?如果有一个比urllib更好的模块,我对此没有意见。有一个更好的模块,它被称为: 请求遵循重定向(检查响应历史记录查看它遵循的重定向)。通过使用会话(可选),存储cookie并将其传递给后续请求。您可以为每个请求或每个会话设置标

此代码将返回
http://espn.go.com/
,这就是我想要的——重定向网站URL。看了Python文档、谷歌搜索等之后,我不知道如何:

  • 捕获重定向的网站URL(已工作)
  • 更改外出请求的用户代理
  • 接受网页可能要发回的任何cookie
  • 在Python3中如何实现这一点?如果有一个比
    urllib
    更好的模块,我对此没有意见。

    有一个更好的模块,它被称为:


    请求
    遵循重定向(检查
    响应历史记录
    查看它遵循的重定向)。通过使用会话(可选),存储cookie并将其传递给后续请求。您可以为每个请求或每个会话设置标题(因此,为该会话发送的每个请求都会发送相同的额外标题)。

    使用urllib(python3)的简单演示:


    如果发生重定向,您应该检查标题(30倍)。

    +1谢谢,这就成功了。我最喜欢这个解决方案。我需要一个使用urllib/http而不是请求的解决方案,这个解决方案让我达到了目的
    import urllib.request
    url="http://espn.com"
    f = urllib.request.urlopen(url)
    contents = f.read().decode('latin-1')
    q = f.geturl()
    print(q)
    
    import requests
    
    session = requests.Session()
    session.headers['User-Agent'] = 'My-requests-agent/0.1'
    
    resp = session.get(url)
    contents = resp.text  # If the server said it's latin 1, this'll be unicode (ready decoded)
    print(resp.url)       # final URL, after redirects.
    
    #!/usr/bin/env python3
    #-*- coding:utf-8 -*-
    
    import os.path
    import urllib.request
    from urllib.parse import urlencode
    from http.cookiejar import CookieJar,MozillaCookieJar
    
    cj = MozillaCookieJar()
    opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
    urllib.request.install_opener(opener)
    
    cookie_file=os.path.abspath('./cookies.txt')
    
    def load_cookies(cj,cookie_file):
        cj.load(cookie_file)
    def save_cookies(cj,cookie_file):
        cj.save(cookie_file,ignore_discard=True,ignore_expires=True)
    
    def dorequest(url,cj=None,data=None,timeout=10,encoding='UTF-8'):
        data = urlencode(data).encode(encoding) if data else None
    
        request = urllib.request.Request(url)
        request.add_header('User-Agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')
        f = urllib.request.urlopen(request,data,timeout=timeout)
        return f.read()
    
    def dopost(url,cj=None,data=None,timeout=10,encoding='UTF-8'):
        body = dorequest(url,cj,data,timeout,encoding)
        return body.decode(encoding)