中企动力 > 头条 > python中的url下载

网站性能检测评分

注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。

python中的url下载

强大的视频(中美日)下载器:Lulu 流量视频课程

img

难敌

关注

Python部落(python.freelycode)组织翻译,禁止转载,欢迎转发。

Lulu是you-get的一个fork(从网上下载东西的傻瓜式下载器)。

为什么fork?

更新的更快

安装

前提

需要以下的依赖项,必须单独安装。

Python 3.4+

FFmpeg(强烈推荐) 或 Libav

(可选)RTMPDump

通过pip安装

升级:

部署

安装pipenv:

和fabric(注意: fabric目前不支持python3,使用pip2来安装):

初始化virtualenv

安装所有依赖项:

使用shell:

运行测试:

开始

如何使用 Lulu从Bilibili下载视频,如下:

下载一个视频

当你获取一个感兴趣的视频,你可能想使用--info/-i选项来查看所有可用的质量和格式:

默认获取标记为DEFAULT格式的。如果你觉得很酷,就下载吧:

(如果一个YouTube视频有任何隐藏字幕,按SubRip格式,它们将和视频文件一起下载下来。)

或者,如果你喜欢另一种格式(mp4),使用lulu选项展示的:

提示:

此时,我们支持的大多数站点都没有实现格式选择;在这种情况下,下载的默认格式是质量最高的格式。

ffmpeg是一个必须的依赖项,用于下载和合并多个部分的视频流(比如优酷之类的网站),并且用于1080p或高分辨率的YouTube视频。

如果你不想lulu下载后合并视频,使用--no-merge/-n选项。

下载其它东西

如果你已经有你想要的资源的URL,可以直接下载它:

此外,lulu将搜索网页并尝试找出是否有你感兴趣的内容:

注意:

这个特性是实验性的,远非完美。它最适合从流行网站Tumblr和博客上搜素大型图像,但真的没有通用的模式可以应用到互联网上的所有网站。

在谷歌搜索视频并下载

可以把任何东西传给lulu。如果它不是一个有效的URL,lulu会做一个谷歌搜索并下载最相关的视频给你。(这可能不是你想看到的,但仍然很有可能。)

暂停和恢复下载

你可以使用Ctrl+C来中断下载。

临时.download文件保存在输出目录中。下次使用相同的参数运行lulu时,下载进度将从上次会话恢复。如果文件完全下载 (临时.download扩展已不复存在),lulu会跳过下载。

要强制重新下载,请使用--force/-ff选项。(警告:这样做将覆盖任何同名的现有文件或临时文件!)

设置下载文件的路径和名称

使用--output-dir/-o选项来设置路径,和--output-filename/-O来设置下载文件的名称:

提示:

如果您遇到默认的视频标题问题,这些选项很有用,它们可能包含与当前的shell / operating system / filesystem不匹配的特殊字符。

如果您为批量下载文件编写脚本并指定名称将它们放入指定文件夹中,这些选项也是有帮助的。

代理服务器设置

您可以通过--http-proxy/-x选项指定一个http代理供lulu使用。

然而,系统代理设置(即环境变量http_proxy)是默认应用。若要禁用任何代理,请使用--no-proxy选项。

提示:

如果你需要大量使用代理(以防网络阻塞某些站点),你可能想要使用lulu与proxychains并设置alias lulu="proxychains -q lulu"(在Bash中)。

一些网站(如优酷),如果你需要访问一些在中国大陆是唯一可用的视频,有一个使用特定的代理从网站提取视频信息的选项--extractor-proxy/-y。

观看视频

使用--player/-p选项将视频输入到你选择的媒体播放器中,例如mplayer或vlc,而不是下载它:

或者,如果你喜欢在浏览器中观看视频,只是没有广告或评论部分:

提示:

使用-p选项启动另一个下载管理器是可能的,例如,lulu -p uget-gtk "https://youtube/watch?v=jNQXAC9IVRw",虽然他们可能一起播放不太好。

加载cookies

并非所有的视频都是公开提供给任何人。如果您需要登录您的帐户以访问某些内容(例如,私人视频),通过--cookies/-c选项将浏览器cookie提供给lulu是不可避免的。

注意:

到目前为止,我们支持两种浏览器cookie格式:Mozilla cookies.sqlite和Netscape cookies.txt。

利用提取的数据

使用--url/-u获取从页面中提取的可下载资源URL列表。使用--json已以JSON格式获取提取数据的摘要。

警告:

目前,这个特性还没有稳定下来,JSON模式在未来可能会发生一些变化。

多线程下载

使用-T/--thread number选项启用多线程下载(只适用于多个部分的视频),number表示要使用多少线程。

支持的网站

对于所有其它未列出的网站,通用提取器将从页面中查找和下载感兴趣的资源。

作者

你可以在这里找到所有贡献者的列表。

授权

MIT

英文原文:https://github/iawia002/Lulu?utm_source=mybridge&utm_medium=web&utm_campaign=read_more 译者:张新英

Python开源项目|3个实用的URL处理库,可支持python2/3等多版本 互联网视频课程

img

于亦寒

关注

furl:

furl是一个让处理 URL 更简单小型 Python 库。FILL进行解析和操作URL更加轻松。他还能一并支持并支持Python 2、Python 3、PyP 2和PyP 3。

purl:

purl是一个简单的,不可变的URL类,具有简洁的 API 用于询问和操作。支持Pythons 2.7、3.3、3.4、3.5和PyPy。

pyshorteners:

pyshorteners是一个 Python URL 的缩短库。

webargs:

webargs是一个Python库,用于解析和验证HTTP请求参数,并内置支持流行的Web框架,包括Flask, Django, Bottle, Tornado和 Pyramid

以上,有任何IT问题都欢迎问我~这里有一些我收集的资料想要的私信!回复【资料】即可

Python学习:urllib简介 推广视频课程

img

DO

关注

Python 3 的 urllib 模块是一堆可以处理 URL 的组件集合。如果你有 Python 2 的知识,那么你就会注意到 Python 2 中有 urllib 和 urllib2 两个版本的模块。这些现在都是 Python 3 的 urllib 包的一部分。当前版本的 urllib 包括下面几部分:

urllib.requesturllib.errorurllib.parseurllib.rebotparser

接下来我们会分开讨论除了 urllib.error 以外的几部分。官方文档实际推荐你尝试第三方库, requests,一个高级的 HTTP 客户端接口。然而我依然认为知道如何不依赖第三方库打开 URL 并与之进行交互是很有用的,而且这也可以帮助你理解为什么 requests 包是如此的流行。

urllib.request

urllib.request 模块期初是用来打开和获取 URL 的。让我们看看你可以用函数 urlopen 可以做的事:

>>> import urllib.request>>> url = urllib.request.urlopen('https://google/')>>> url.geturl()'https://google/'>>> url.info()<http.client.HTTPMessage object at 0x7fddc2de04e0>>>> header = url.info()>>> header.as_string()('Date: Fri, 24 Jun 2016 18:21:19 GMT\n' 'Expires: -1\n' 'Cache-Control: private, max-age=0\n' 'Content-Type: text/html; charset=ISO-8859-1\n' 'P3P: CP="This is not a P3P policy! See ' 'https://google/support/accounts/answer/151657?hl=en for more info."\n' 'Server: gws\n' 'X-XSS-Protection: 1; mode=block\n' 'X-Frame-Options: SAMEORIGIN\n' 'Set-Cookie: ' 'NID=80=tYjmy0JY6flsSVj7DPSSZNOuqdvqKfKHDcHsPIGu3xFv41LvH_Jg6LrUsDgkPrtM2hmZ3j9V76pS4K_cBg7pdwueMQfr0DFzw33SwpGex5qzLkXUvUVPfe9g699Qz4cx9ipcbU3HKwrRYA; ' 'expires=Sat, 24-Dec-2016 18:21:19 GMT; path=/; domain=.google; HttpOnly\n' 'Alternate-Protocol: 443:quic\n' 'Alt-Svc: quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"\n' 'Accept-Ranges: none\n' 'Vary: Accept-Encoding\n' 'Connection: close\n' '\n')>>> url.getcode()200

在这里我们包含了需要的模块,然后告诉它打开 Google 的 URL。现在我们就有了一个可以交互的 HTTPResponse 对象。我们要做的第一件事是调用方法 geturl ,它会返回根据 URL 获取的资源。这可以让我们发现 URL 是否进行了重定向。

接下来调用 info ,它会返回网页的元数据,比如请求头信息。因此,我们可以将结果赋给我们的 headers 变量,然后调用它的方法 as_string 。就可以打印出我们从 Google 收到的头信息。你也可以通过 getcode 得到网页的 HTTP 响应码,当前情况下就是 200,意思是正常工作。

如果你想看看网页的 HTML 代码,你可以调用变量 url 的方法 read。我不准备再现这个过程,因为输出结果太长了。

请注意 request 对象默认发起 GET 请求,除非你指定了它的 data 参数。如果你给它传递了 data 参数,这样 request 对象将会变成 POST 请求。

下载文件

urllib 一个典型的应用场景是下载文件。让我们看看几种可以完成这个任务的方法:

>>> import urllib.request>>> url = 'http://blog.pythonlibrary.org/wp-content/uploads/2012/06/wxDbViewer.zip'>>> response = urllib.request.urlopen(url)>>> data = response.read()>>> with open('/home/mike/Desktop/test.zip', 'wb') as fobj:...     fobj.write(data)...

这个例子中我们打开一个保存在我的博客上的 zip 压缩文件的 URL。然后我们读出数据并将数据写到磁盘。一个替代此操作的方案是使用 urlretrieve :

>>> import urllib.request>>> url = 'http://blog.pythonlibrary.org/wp-content/uploads/2012/06/wxDbViewer.zip'>>> tmp_file, header = urllib.request.urlretrieve(url)>>> with open('/home/mike/Desktop/test.zip', 'wb') as fobj:...     with open(tmp_file, 'rb') as tmp:...         fobj.write(tmp.read())

方法 urlretrieve 会把网络对象拷贝到本地文件。除非你在使用 urlretrieve 的第二个参数指定你要保存文件的路径,否则这个文件将被拷贝到临时文件夹的随机命名的一个文件中。这个可以为你节省一步操作,并且使代码看起来更简单:

>>> import urllib.request>>> url = 'http://blog.pythonlibrary.org/wp-content/uploads/2012/06/wxDbViewer.zip'>>> urllib.request.urlretrieve(url, '/home/mike/Desktop/blog.zip')('/home/mike/Desktop/blog.zip', <http.client.HTTPMessage object at 0x7fddc21c2470>)

如你所见,它返回了文件保存的路径,以及从请求得来的头信息。

设置你的用户代理

当你使用浏览器访问网页时,浏览器会告诉网站它是谁。这就是所谓的 user-agent (用户代理)字段。Python 的 urllib 会表示它自己为 Python-urllib/x.y , 其中 x 和 y 是你使用的 Python 的主、次版本号。有一些网站不认识这个用户代理字段,然后网站可能会有奇怪的表现或者根本不能正常工作。辛运的是你可以很轻松的设置你自己的 user-agent 字段。

>>> import urllib.request>>> user_agent = ' Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0'>>> url = 'http://whatsmyua/'>>> headers = {'User-Agent': user_agent}>>> request = urllib.request.Request(url, headers=headers)>>> with urllib.request.urlopen(request) as response:...     with open('/home/mdriscoll/Desktop/user_agent.html', 'wb') as out:...         out.write(response.read())

这里设置我们的用户代理为 Mozilla FireFox ,然后我们访问 http://whatsmyua/ , 它会告诉我们它识别出的我们的 user-agent 字段。之后我们将 url 和我们的头信息传给 urlopen 创建一个 Request 实例。最后我们保存这个结果。如果你打开这个结果,你会看到我们成功的修改了自己的 user-agent 字段。使用这段代码尽情的尝试不同的值来看看它是如何改变的。

urllib.parse

urllib.parse 库是用来拆分和组合 URL 字符串的标准接口。比如,你可以使用它来转换一个相对的 URL 为绝对的 URL。让我们试试用它来转换一个包含查询的 URL :

>>> from urllib.parse import urlparse>>> result = urlparse('https://duckduckgo/?q=python+stubbing&t=canonical&ia=qa')>>> resultParseResult(scheme='https', netloc='duckduckgo', path='/', params='', query='q=python+stubbing&t=canonical&ia=qa', fragment='')>>> resultloc'duckduckgo'>>> result.geturl()'https://duckduckgo/?q=python+stubbing&t=canonical&ia=qa'>>> result.portNone

这里我们导入了函数 urlparse , 并且把一个包含搜索查询字串的 duckduckgo 的 URL 作为参数传给它。我的查询字串是搜索关于 “python stubbing” 的文章。如你所见,它返回了一个 ParseResult 对象,你可以用这个对象了解更多关于 URL 的信息。举个例子,你可以获取到端口信息(本例中没有端口信息)、网络位置、路径和很多其它东西。

提交一个 Web 表单

这个模块还有一个方法 urlencode 可以向 URL 传输数据。 urllib.parse 的一个典型使用场景是提交 Web 表单。让我们通过搜索引擎 duckduckgo 搜索 Python 来看看这个功能是怎么工作的。

>>> import urllib.request>>> import urllib.parse>>> data = urllib.parse.urlencode({'q': 'Python'})>>> data'q=Python'>>> url = 'http://duckduckgo/html/'>>> full_url = url + '?' + data>>> response = urllib.request.urlopen(full_url)>>> with open('/home/mike/Desktop/results.html', 'wb') as f:...     f.write(response.read())

这个例子很直接。基本上我们是使用 Python 而不是浏览器向 duckduckgo 提交了一个查询。要完成这个我们需要使用 urlencode 构建我们的查询字符串。然后我们把这个字符串和网址拼接成一个完整的正确 URL ,然后使用 urllib.request 提交这个表单。最后我们就获取到了结果然后保存到磁盘上。

urllib.robotparser

robotparser 模块是由一个单独的类 RobotFileParser 构成的。这个类会回答诸如一个特定的用户代理是否获取已经设置了 robot.txt 的网站的 URL。 robot.txt 文件会告诉网络爬虫或者机器人当前网站的那些部分是不允许被访问的。让我们看一个简单的例子:

>>> import urllib.robotparser>>> robot = urllib.robotparser.RobotFileParser()>>> robot.set_url('http://arstechnica/robots.txt')None>>> robot.read()None>>> robot.can_fetch('*', 'http://arstechnica/')True>>> robot.can_fetch('*', 'http://arstechnica/cgi-bin/')False

这里我们导入了 robot 分析器类,然后创建一个实例。然后我们给它传递一个表明网站 robots.txt 位置的 URL 。接下来我们告诉分析器来读取这个文件。完成后,我们给它了一组不同的 URL 让它找出那些我们可以爬取而那些不能爬取。我们很快就看到我们可以访问主站但是不能访问 cgi-bin 路径。

总结一下

现在你就有能力使用 Python 的 urllib 包了。在这一节里,我们学习了如何下载文件、提交 Web 表单、修改自己的用户代理以及访问 robots.txt。 urllib 还有一大堆附加功能没有在这里提及,比如网站身份认证。你可能会考虑在使用 urllib 进行身份认证之前切换到 requests 库,因为 requests 已经以更易用和易调试的方式实现了这些功能。我同时也希望提醒你 Python 已经通过 http.cookies 模块支持 Cookies 了,虽然在 request 包里也很好的封装了这个功能。你应该可能考虑同时试试两个来决定那个最适合你。

via: http://blog.pythonlibrary.org/2016/06/28/python-101-an-intro-to-urllib/

作者:Mike[1] 译者:Ezio[2] 校对:wxy[3]

本文由 LCTT[4] 原创翻译,Linux中国[5] 荣誉推出

[1]: http://blog.pythonlibrary.org/author/mld/[2]: https://github/oska874[3]: https://github/wxy[4]: https://github/LCTT/TranslateProject[5]: https://linux/

推荐文章

点击标题或输入文章 ID 直达该文章741 “最好的语言” PHP 如何造就 Facebook?3897 用 Python 打造你的 Eclipse3977 Linux 是世界上最大的软件开发项目

将文章分享给朋友是对我们最好的赞赏!

查看原文 >>

python爬虫小知识,中文在url中的编码解码 互联网视频课程

img

朱醉蝶

关注

有时候我们做爬虫经常会遇到这种编码格式,大概的样式为 %xx%xx%xx,对于这部分编码,python提供了一个quote的方法来编码,对应的解码为unquote方法。

导入

quote方法是urllib库的一个方法,它的导入方式为

from urllib.parse import quote,unquote不需要安装,urllib库是python自带的一个库,直接导入就可以使用。

编码、解码

直接上实例

额。。。大家请忽略那些波浪线。。。因为我的pycharm很旧了,版本没有更新,所以,用f-string会提示错误,但实际上能运行的。

通过上图可以看到,很简单的方式就可以编码和解码了!需要注意的就是它们的格式必须一致,否则会出现乱码的!

关于爬虫

今天给大家分享的就是这些,有的网站的参数或者url里,是需要把中文转换为特殊格式才可以的,那么就会用到今天的这个方法,而且它本身还有其他的很多功能,比如部分转换等等功能。

最近迷上了GUI做程序,在做一个爬虫下载+列表播放的小项目,做完后在分享出来,大家加油!

python爬虫翻页方式(一)修改请求url 企业视频课程

img

利特尔汉普顿

关注

python爬虫翻页不会了?

很多初学python爬虫的小伙伴们都会遇到python爬虫翻页的问题,我在这里先介绍一种。实践出真知,前几天有朋友说她(女性朋友,没想到吧)的导师让她整理一份资料。她便让我帮她整理一下那些资料。在写爬虫的过程中,我也遇到了翻页的问题。

需要爬取的网站如图所示

查询的这种植物有四页。当我们平时翻页时,首先想到肯定是点击页面上的下一页,写爬虫也是如此,想提取页面上的链接进行访问。

不过我告诉你,这样做很麻烦,并且效率很低。没人用!!!

翻页的方式一般有两种:

1、观察网站翻页时链接变化

2、如果写爬虫的请求方式是post方式请求,则需要观察post的数据的变化是否有规律

今天讲得是第一种方法

如图,当我点击下一页时,观察到地址栏的链接变化

在链接中我们可以惊喜的发现,有page关键字,而且恰好为2,我们试验一下,将链接中page的值改为3,发现正常访问,正好是第三页。因此,我们找到了翻页方式,更改链接中关键字的值。

因此翻页过程步骤为:

1、获取总网页数目

2、利用for循环改变page的值,进行翻页。

具体翻页代码实现如下:

获取总页码网络请求方式翻页代码,改变请求头中的page数值

想要获取所有代码的可以私信我,大家共同学习。

码字不容易,大家多关照。

python提取页面内URL的方法 互联网视频课程

img

伍飞扬

关注

什么是URL?

URL是Internet上描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL的一般格式为(带方括号[]的为可选项):

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

URL的格式由三部分组成:

①第一部分是协议(或称为服务方式)。

②第二部分是存有该资源的主机IP地址(有时也包括端口号)。

③第三部分是主机资源的具体地址,如目录和文件名等。

第一部分和第二部分用“://”符号隔开,

第二部分和第三部分用“/”符号隔开。

第一部分和第二部分是不可缺少的,第三部分有时可以省略。

python提取页面内URL的方法

from bs4 import BeautifulSoup

import time,re,urllib2

t=time.time()

websiteurls={}

def scanpage(url):

websiteurl=url

t=time.time()

n=0

html=urllib2.urlopen(websiteurl).read()

soup=BeautifulSoup(html)

pageurls=[]

Upageurls={}

pageurls=soup.find_all(“a”,href=True)

for links in pageurls:

if websiteurl in links.get(“href”) and links.get(“href”) not in Upageurls and links.get(“href”) not in websiteurls:

Upageurls[links.get(“href”)]=0

for links in Upageurls.keys():

try:

urllib2.urlopen(links).getcode()

except:

print “connect failed”

else:

t2=time.time()

Upageurls[links]=urllib2.urlopen(links).getcode()

print n,

print links,

print Upageurls[links]

t1=time.time()

print t1-t2

n+=1

print (“total is “+repr(n)+” links”)

print time.time()-t

scanpage(“http://news.163/”)

文章转载:https://trustauth/wiki/19942.html

python爬虫小知识,中文在url中的编码解码 互联网视频课程

img

Moni

关注

有时候我们做爬虫经常会遇到这种编码格式,大概的样式为 %xx%xx%xx,对于这部分编码,python提供了一个quote的方法来编码,对应的解码为unquote方法。

导入

quote方法是urllib库的一个方法,它的导入方式为

from urllib.parse import quote,unquote不需要安装,urllib库是python自带的一个库,直接导入就可以使用。

编码、解码

直接上实例

额。。。大家请忽略那些波浪线。。。因为我的pycharm很旧了,版本没有更新,所以,用f-string会提示错误,但实际上能运行的。

通过上图可以看到,很简单的方式就可以编码和解码了!需要注意的就是它们的格式必须一致,否则会出现乱码的!

关于爬虫

今天给大家分享的就是这些,有的网站的参数或者url里,是需要把中文转换为特殊格式才可以的,那么就会用到今天的这个方法,而且它本身还有其他的很多功能,比如部分转换等等功能。

最近迷上了GUI做程序,在做一个爬虫下载+列表播放的小项目,做完后在分享出来,大家加油!

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP