【问题标题】:Parsing webpage with beautifulsoup to get dynamic content用beautifulsoup解析网页以获取动态内容
【发布时间】:2013-09-24 06:11:04
【问题描述】:

我正在尝试解析以下页面 http://www.lyricsnmusic.com/roxy-music/while-my-heart-is-still-beating-lyrics/26925936获取相似歌曲列表。

页面源中不存在类似歌曲的列表,但当我在浏览器中使用“检查元素”时会出现。 我该怎么做?? 当前代码:

url = 'http://www.lyricsnmusic.com/roxy-music/while-my-heart-is-still-beating-lyrics/26925936'
request = urllib2.Request(url)
lyricsPage = urllib2.urlopen(request).read()
soup = BeautifulSoup(lyricsPage)

生成链接的代码是:

for p in soup.find_all('p'):
    s = p.find('a', { "class" : 'title' }).get('href')

有哪些方法可以做到这一点?

【问题讨论】:

标签: python web-scraping beautifulsoup


【解决方案1】:

这可能由一些 ajax 调用处理,因此它不会在源中,

我认为您需要通过浏览器中的开发人员工具“监控网络”并查找您感兴趣的请求。

即从此页面随机选择的请求 URL:

http://ws.audioscrobbler.com/2.0/?api_key=73581584905631c5fc15720f03b0b9c8&format=json&callback=jQuery1703329798618797213_1380004055342&method=track.getSimilar&limit=10&artist=roxy%20music&track=while%20my%20heart%20is%20still%20beating&_=1380004055943

要获取/查看响应,请在浏览器中输入上述 URL 并查看响应的内容。

因此您需要在 python 中模拟请求,并且在获得响应后,您必须解析响应以获取有趣的细节。

【讨论】:

  • 在 Windows 上,我建议使用 Fiddler[1] 来帮助对 AJAX 调用进行逆向工程:[1]:fiddler2.com/features
  • 您也可以成功使用web driver 来控制实际的网络浏览器,让它为您处理ajax 调用。
  • 我能够对 Lastfm 进行 API 调用,并直接获取类似歌曲的列表并在原始网站上构建它们的 url。谢谢大家
  • @kevgathuku 。你是怎么做到的?你能分享你的代码吗?
猜你喜欢
  • 2019-05-24
  • 2019-10-23
  • 1970-01-01
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 2017-10-29
相关资源
最近更新 更多