我正在尝试从这个页面 myspace.com/discover/ar… 中爬取艺术家的 URL。但是,这个页面正在使用 Ajax 调用来获取用户详细信息。我可以在 Firebug 中看到这个 URL myspace.com/ajax/artist… URL,则不会显示任何内容。但是,如果我查看 Firebug 中的响应标签,则会显示所有详细信息。我怎样才能获得所有这些内容?
2、解决方案
问题的根源在于 Ajax 调用时请求头设置方式与在官方 MySpace 页面 myspace.com/discover/ar… 中进行请求时不同。
要解决此问题,需要获取有效请求头中的 Hash 和 Referer 标头。
- Hash 标头: Hash 标头是通过 context.hashMashter 设置的,context.hashMashter 是一个 JavaScript 变量,可在 x.myspacecdn.com/new/common/… 中找到。
为了计算 Hash 标头,我们需要获取 a 变量,它是在 x.myspacecdn.com/new/common/… 中定义的。
// 在 global.7A07230F0926F7451E2F85D8F2C647D0.min.js 中:
a.setRequestHeader("Hash", context.hashMashter)
- Referer 标头: Referer 标头应设置为 myspace.com/discover/ar…
一旦有了这些信息,就可以在 Ajax 请求中设置正确的请求头,以获取所需的数据。
以下是使用 Python 和 requests 库发送有效 Ajax 请求的示例代码:
import requests
# 设置请求头
headers = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, sdch",
"Accept-Language": "en-US,en;q=0.8",
"Cache-Control": "no-cache",
"Client": "persistentId=53065c06-c877-47c5-933a-4b22d7f28cd9&screenWidth=1440&screenHeight=900&timeZoneOffsetHours=7&visitId=31c9d922-9984-4ac5-9bb0-0bb253bc89c3&windowWidth=1043&windowHeight=407",
"Connection": "keep-alive",
"Cookie": "persistent_id=pid%3D53065c06-c877-47c5-933a-4b22d7f28cd9%26llid%3D%26lprid%3D%26lltime%3D; beacons_enabled=true; __utmt=1; ads=adInitVisit%3D1432446031357; player=sequenceId%3D-1%26paused%3Dtrue%26currentTime%3D0%26volume%3D0.5%26mute%3Dfalse%26shuffled%3Dfalse%26repeat%3Doff%26mode%3Dqueue%26radioEntity%3D%26radioMediaType%3D%26radioMediaId%3D%26radioCurrentTime%3D0%26pinned%3Dfalse%26streamStartDateTime%3D%26radioStreamStartDateTime%3D%26at%3D360%26incognito%3Dfalse%26allowSkips%3Dtrue%26ccOn%3Dfalse; visit_id=31c9d922-9984-4ac5-9bb0-0bb253bc89c3; __utma=102911388.1051160901.1432446029.1432446029.1432446029.1; __utmb=102911388.2.10.1432446029; __utmc=102911388; __utmz=102911388.1432446029.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)",
"DNT": "1",
"Hash": "NjI2YWM0YzM0YmJiZTg1NsKqwpMGw8HCuAvClMOGwoxAXMOXw50Qw5PCnH7DqVQIAygsY25wwrfCtsOcd8KuwqnCiMKSwobCrMKswpvDhEIrDcKYM0rCocKbJcKYEsKWw53Dr8KIwq7CgMKWw5XCo8KBGHVvURQKwpzDrMO9w5fDlsKzNhDChMOtw7wgw7NuDsK0wq1oC1sOOXAzK8KuwqdyEUDDnRk+w6BPwrIhfsKtw7Fewrcpa8Okw4c=",
"Host": "myspace.com",
"Pragma": "no-cache",
"Referer": "https://myspace.com/discover/artists?genreId=1002532",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2409.0 Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
}
# 发送 Ajax 请求
response = requests.get("https://myspace.com/ajax/artistspage?chartType=heavyrotation&genreId=1002532&page=0", headers=headers)
# 打印响应内容
print(response.text)
通过运行此代码,您应该能够获取所需的艺术家 URL。