我正在尝试创建一个基本的刮刀,它将从Soundcloud上搜索用户名和歌曲标题。通过检查我需要的元素(使用Chrome),我发现我需要找到与每个标签'span'相关联的字符串title =“soundTitle__usernameText”。使用BeautifulSoup
,urllib2
和lxml
,我有以下搜索'robert delong'的代码:
from lxml import html
from bs4 import BeautifulSoup
from urllib2 import urlopen
import requests
def search_results(url):
html = urlopen(url).read()
# html = requests.get(url) I've tried this also
soup = BeautifulSoup(html, "lxml")
usernames = [span.string for span in soup.find_all("span", "soundTitle__usernameText")]
return usernames
print search_results('http://soundcloud.com/search?q=robert%20delong')
这将返回一个空列表。但是,当我通过选择文件>保存>格式网页,完成并使用该关联的HTML文件而不是使用urlopen
获取的文件来保存Chrome上的完整网页时,代码会打印
[u'Two Door Cinema Club',u'whatever-28',u'AWOLNATION',u'Two Door Cinema Club',u'Sean Glass',u'Capital Cities',u'Robert DeLong', u'RAC',u'JR JR']
这是理想的结果。对我来说,似乎urlopen
使用了一些截断的HTML代码来进行搜索,这就是它返回一个空列表的原因。
关于我如何能够访问通过手动保存网页获得的相同HTML,但使用Python /终端的任何想法?谢谢。
答案 0 :(得分:3)
通过查看Chrome制作的请求(ctrl + shift + i,“网络”),我看到它请求了https://api-v2.soundcloud.com/search?q=robert%20delong
。我相信对此的回应有您需要的信息。
实际上,这对你有好处。阅读JSON应该比解析HTML更直接;)
答案 1 :(得分:2)
这是您可以使用终端及其相关链接和图像下载网页html的代码:
wget -p --convert-links http://www.website.com/directory/webpage.html