我不熟悉网络抓取功能,我试图创建一个抓取器,它可以查看播放列表链接并获取音乐和作者的列表。
但是该站点一直拒绝我的连接,因为它认为我是一个机器人,所以我使用UserAgent创建了一个虚假的useragent字符串来尝试绕过过滤器。
有点奏效吗?但是问题是,当您通过浏览器访问该网站时,您可以看到播放列表的内容,但是当您尝试提取带有请求的html代码时,播放列表的内容只是一个很大的空白。
Mabye,我必须等待页面加载吗?还是有一个更强大的漫游器过滤器?
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
ua = UserAgent()
melon_site="http://kko.to/IU8zwNmjM"
headers = {'User-Agent' : ua.random}
result = requests.get(melon_site, headers = headers)
print(result.status_code)
src = result.content
soup = BeautifulSoup(src,'html.parser')
print(soup)
答案 0 :(得分:2)
要记住时要报废
1)使用一个好的用户代理。ua.random可能会向您返回被服务器阻止的用户代理
2)如果您要进行太多的抓取操作,请限制抓取速度,请使用time.sleep(),以免您的IP地址无法加载服务器,否则它将阻止您。
3)如果服务器阻塞,请尝试使用IP旋转。
答案 1 :(得分:2)
您想签出this link来获取想要获取的内容。
下面的尝试应该可以使您获得歌手的名字和他们的歌曲名称。
nvm install v10.20.1
nvm alias default v10.20.1
npm install -g firebase-tools
输出如下:
import requests
from bs4 import BeautifulSoup
url = 'https://www.melon.com/mymusic/playlist/mymusicplaylistview_listSong.htm?plylstSeq=473505374'
r = requests.get(url,headers={"User-Agent":"Mozilla/5.0"})
soup = BeautifulSoup(r.text,"html.parser")
for item in soup.select("tr:has(#artistName)"):
artist_name = item.select_one("#artistName > a[href*='goArtistDetail']")['title']
song = item.select_one("a[href*='playSong']")['title']
print(artist_name,song)
注意:您的BeautifulSoup版本应为Martin Garrix - 페이지 이동 Used To Love (feat. Dean Lewis) 재생 - 새 창
Post Malone - 페이지 이동 Circles 재생 - 새 창
Marshmello - 페이지 이동 Here With Me 재생 - 새 창
Coldplay - 페이지 이동 Cry Cry Cry 재생 - 새 창
或更高版本,以便脚本支持伪选择器。