【发布时间】:2014-12-16 01:07:39
【问题描述】:
[要打开示例网址,您需要登录 Shazam]
所以我正在编写一个脚本来下载我的 Shazam 历史记录,这样我就可以操纵它来将播放列表写入其他服务。无论如何,我无法直接解析来自 http://www.shazam.com/myshazam 的历史记录,因为那里正在进行大量 JavaScript 重新加载,我想解决这个问题会更难。 这就是为什么我要操作你可以下载的文件,你可以在这里找到http://www.shazam.com/myshazam/download-history
我正在尝试找到一种方法来做到这一点,但我在这里遇到了一些问题。
第一次我打算使用 urlretrieve
import urllib
urllib.urlretrieve ("http://www.shazam.com/myshazam/download-history, "myshazam-history.html")
但我什至不确定这是否会起作用,因为当我尝试下载该文件时,没有像 http://www.shazam.com/myshazam/download-history/myshazam-history.html 这样的实际 URL 路径(这会给你一个 404 错误)。相反,当您点击该 URL 时,它会立即重定向到 http://www.shazam.com,并提示浏览器的下载窗口。
第二个问题是我仍然需要保存会话的 cookie,我不知道如何将其传递给 urlretrieve 以测试它是否有效。下面是我写的一个测试代码,它正在登录,保持会话,然后解析一个网页。
def LoginFB(username,password):
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
url = "https://www.facebook.com/login.php?skip_api_lo....allthe_loginshazam_stuff)"
data = "&email="+username+"&pass="+password
socket = opener.open(url)
return socket, opener
def shazamParse(opener):
url = "http://www.shazam.com/myshazam/"
content = opener.open(url).read()
soup = BeautifulSoup(content)
finalParse = soup.prettify()
return finalParse.encode("utf-8")
(socket, opener) = LoginFB("email","password")
shazamParse(opener)
我想要做的是以登录用户(持有会话cookie)的身份点击下载网址,将文件下载到内存中,将文件的内容放入一个字符串,然后用BeautifulSoup解析它。与我的 shazamParse 函数完全相同的方法只是我从 myshazam-history.html 文件内容的字符串中读取。
关于如何做到这一点的任何想法或提示?
【问题讨论】:
-
Python 有许多库可以自动执行此操作。斜纹布是我的最爱。
标签: python cookies urllib2 python-requests stringio