我正在尝试使用urlretrieve
检索文件,同时添加自定义头。
检查urllib的代码源时。request
我意识到urlopen
可以在参数中获取request
对象,而不仅仅是一个字符串,从而可以放置我想要的标题。但是,如果我尝试对urlretrieve
执行相同的操作,我会得到一个类型错误:预期的字符串或类似字节的对象,正如在另一篇文章中提到的。
我最终所做的是重写我自己的url检索,删除抛出错误的行(该行在我的用例中无关紧要)。
它工作得很好,但我想知道是否有更好/更干净的方法,而不是重写我自己的urlretrieve
。如果可以将自定义标题传递给urlopen
,则感觉应该可以对urlretrieve
执行相同的操作?
urllib。要求urlretrieve()
在urllib内部使用。要求urlopen()
(至少在Python 3中)。因此,您可以使用相同的方法来影响urlopen
的行为。
当调用urlope(params)
时,它实际上首先查看特殊的全局变量urllib.request._opener
,如果它是无
,那么urlopen
将变量设置为默认的开放程序集否则它将保持原样。下一步它将调用urllib.request._opener.open(
开启器。open()
包含不同协议的处理程序列表。当开启器打开时。调用open()
,然后它将执行以下操作:
从URLurllib创建。要求请求
对象(或者如果您直接提供请求
它只会使用它)
对于您自己的开场白,您必须执行以下3个步骤:
创建自己的处理程序
urllib。要求build_opener
创建包含自定义处理程序的opener,并添加默认opener(自定义处理程序继承自的处理程序除外)。
因此,要添加自定义标题,您可以编写如下内容:
import urllib.request as req
class MyHTTP(req.HTTPHandler):
def http_request(self, req):
req.headers["MyHeader"] = "Content of my header"
return super().http_request(req)
opener = req.build_opener(MyHTTP())
req.install_opener(opener)
从这一点开始,当您调用
urllib.request.urlretrieve()
或任何使用urlopens()
的东西时,它将用于HTTP通信的处理程序。当您想回到默认处理程序时,您可以调用:
import urllib.request as req
req.install_opener(req.build_opener())
老实说,我不知道它是否比你的解决方案更好/更干净,但它在
urllib
中使用了准备好的机制。
我找到了一种方法,你只需要添加几行额外的代码...
import urllib.request
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
urllib.request.install_opener(opener)
urllib.request.urlretrieve("type URL here", "path/file_name")
如果你想了解细节,你可以参考python留档:https://docs.python.org/3/library/urllib.request.html
我注意到了这一点。要求urlretrieve(url、fname_和_路径)下载任何小文件需要24秒: 而请求。get(url)下载相同文件的速度要快得多 问题是urllib花24秒下载文件的原因是什么?我该如何解决这个问题,让它更快地工作?
问题内容: 我正在尝试在导航栏的中心添加自定义视图,并且正在使用以下代码对其进行测试: 我在视图控制器的viewDidLoad方法中进行设置,但是当我运行程序时,导航栏中似乎没有任何变化。 你能帮我吗? 问题答案: 这可行。初始化时给框架
问题内容: 在我的html中,我很好奇使用唯一标识符(例如 保存图片)而不是语义是否正确。例如: 是否优先拥有: 与CSS: 而不是:我目前有: 与CSS: 唯一标识符的使用在语义上是否正确? 问题答案: 最好避免使用自定义标签,因为您永远不知道这些标签何时会标准化,并在将来有特殊用途。 如果要避免使用标头标记,对于您的示例最好的操作如下: 此外: 如果在设计页面时不使用标准html标记,则在禁用
问题内容: 我正在尝试创建一种类似于英语的小型语言来指定任务。基本思想是将陈述分为动词和名词短语,这些动词应适用于它们。我正在使用nltk,但未获得我希望的结果,例如: 在每种情况下,它都未能意识到第一个单词(选择,移动和复制)被用作动词。我知道我可以创建自定义标签和语法来解决此问题,但是与此同时,当很多此类东西不在我的支持范围内时,我犹豫要重新发明轮子。我特别希望可以同时处理非英语语言的解决方案
问题内容: 我正在尝试使用Python填写并提交表单,但无法检索结果页面。我已经尝试过机械化和urllib / urllib2方法来发布表单,但是都遇到了问题。 我要检索的表单在这里:http: //zrs.leidenuniv.nl/ul/start.php。该页面以荷兰语显示,但这与我的问题无关。可能值得注意的是,表单操作重定向到http://zrs.leidenuniv.nl/ul/quer
我试图使用Apache-POI在word(.docx)文档中创建标题。 我有一个模板,其中只包含自定义样式和标题使用自定义样式的例子。 编辑:如果我使用Apache-POI创建自己的风格,它就可以工作....不过,我真的很喜欢使用word文档中的现有样式。