说我要抓取以下网址:
https://soundcloud.com/search/sounds?q=edm&filter.created_at=last_week
我有以下python代码:
import requests
from lxml import html
urlToSearch = 'https://soundcloud.com/search/sounds?q=edm&filter.created_at=last_week'
page = requests.get(urlToSearch)
tree = html.fromstring(page.content)
print(tree.xpath('//*[@id="content"]/div/div/div[3]/div/div/div/ul/div/div/text()'))
问题是当我在以下xpath打印文本时:
//*[@id="content"]/div/div/div[3]/div/div/div/ul/div/div
尽管我确认“找到500多首曲目”应该在那里,但[]
似乎没有出现。我做错了什么?
答案 0 :(得分:1)
问题是请求不会生成动态内容。
右键单击页面并查看页面源,您将看到静态内容不包含您在加载动态内容后看到的任何内容。
但是,(使用Chrome)打开开发工具,点击网络和XHR。看起来你可以通过一个API来获取数据,这比抓取更好!
答案 1 :(得分:0)
问题是,对于现代网站,几乎所有网页在加载JavaScript,css等之后都会发生很大变化。在进行任何DOM更新之前,您将获取基本的html,并且看起来与实际访问页面的方式不同用浏览器。
使用Selenium WebDriver框架(主要用于测试自动化),它将模拟加载页面,执行javascripts等。