从请求的iframe获取特定文件

时间:2018-07-04 23:05:46

标签: python beautifulsoup python-requests urllib

我想从我正在网站上观看的动漫中获取文件链接。

`import requests
from bs4 import BeautifulSoup
import re

page = requests.get("http://naruto-tube.org/shippuuden-sub-219")
soup = BeautifulSoup(page.content, "html.parser")
inner_content = requests.get(soup.find("iframe")["src"])

print(inner_content.text)`

输出是文件托管者网站(ani-stream)的源代码。但是,我现在的问题是如何获取“ file:xxxxxxx”行而不是整个源代码?

2 个答案:

答案 0 :(得分:0)

如果iframe的来源不是网站(naruto-tube.org)的主域,则无法通过抓取方式访问其内容。

您将不得不使用其他网站,或者需要在iframe中获取网址,并使用诸如请求之类的库来调用该网址。

请注意,您还必须将所有参数(如果有的话)传递给url,以实际获得任何结果。像这样

import urllib
urllib.urlretrieve ("url from the Iframe", "mp4.mp4")

答案 1 :(得分:0)

您可以使用Beautiful Soup解析iframe源代码并找到脚本元素,但是从那里您就可以自己了。 file: "xxxxx",行是用JavaScript代码编写的,因此,您必须找到函数调用(在本例中为playerInstance.setup()),并确定两个这样的“ file:”行中的哪一个是您想要的,并删除网址周围不必要的JS语法。

正则表达式将对此有所帮助,您最好只在iframe的HTML中查找行。您已经导入了re,所以我只是将您的最后一行替换为:

lines = re.findall("file: .*$", inner_content.text, re.MULTILINE)
print( '\n'.join(lines) )

...获取其中包含“ file:”的行的列表。您可以(并且应该)使用更高级的RE来查找带有"http://的RE,并且仅允许在行上“ file:”之前使用空格。 (Python,Java和我的文本编辑器对RE中的内容有不同的想法,因此每次写一个文档时我都必须去看文档。您也可以这样做-毕竟这是您的问题。)

requests.get()函数似乎无法获取字节。尝试Vishnu Kiran的urlretrieve方法-也许行得通。不过,在浏览器窗口中使用URL似乎可以获取正确的视频,因此可能需要欺骗用户代理和/或cookie设置。

相关问题