我想从我正在网站上观看的动漫中获取文件链接。
`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”行而不是整个源代码?
答案 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设置。