And*_*_ye 5 python beautifulsoup web-scraping python-requests botdetect
我是网络抓取的新手,我试图创建一个抓取器,它可以查看播放列表链接并获取音乐和作者的列表。
但该网站一直拒绝我的连接,因为它认为我是机器人,所以我使用 UserAgent 创建一个假的 useragent 字符串来尝试绕过过滤器。
有点效果吗?但问题是,当你通过浏览器访问网站时,你可以看到播放列表的内容,但是当你尝试用请求提取html代码时,播放列表的内容只是一个很大的空白。
也许我必须等待页面加载?或者有更强大的机器人过滤器?
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)
Run Code Online (Sandbox Code Playgroud)
您想查看此链接以获取您想要获取的内容。
\n\n以下尝试应该会为您获取艺术家姓名及其歌曲名称。
\n\nimport requests\nfrom bs4 import BeautifulSoup\n\nurl = \'https://www.melon.com/mymusic/playlist/mymusicplaylistview_listSong.htm?plylstSeq=473505374\'\n\nr = requests.get(url,headers={"User-Agent":"Mozilla/5.0"})\nsoup = BeautifulSoup(r.text,"html.parser")\nfor item in soup.select("tr:has(#artistName)"):\n artist_name = item.select_one("#artistName > a[href*=\'goArtistDetail\']")[\'title\']\n song = item.select_one("a[href*=\'playSong\']")[\'title\']\n print(artist_name,song)\nRun Code Online (Sandbox Code Playgroud)\n\n输出如下:
\n\nMartin Garrix - \xed\x8e\x98\xec\x9d\xb4\xec\xa7\x80 \xec\x9d\xb4\xeb\x8f\x99 Used To Love (feat. Dean Lewis) \xec\x9e\xac\xec\x83\x9d - \xec\x83\x88 \xec\xb0\xbd\nPost Malone - \xed\x8e\x98\xec\x9d\xb4\xec\xa7\x80 \xec\x9d\xb4\xeb\x8f\x99 Circles \xec\x9e\xac\xec\x83\x9d - \xec\x83\x88 \xec\xb0\xbd\nMarshmello - \xed\x8e\x98\xec\x9d\xb4\xec\xa7\x80 \xec\x9d\xb4\xeb\x8f\x99 Here With Me \xec\x9e\xac\xec\x83\x9d - \xec\x83\x88 \xec\xb0\xbd\nColdplay - \xed\x8e\x98\xec\x9d\xb4\xec\xa7\x80 \xec\x9d\xb4\xeb\x8f\x99 Cry Cry Cry \xec\x9e\xac\xec\x83\x9d - \xec\x83\x88 \xec\xb0\xbd\nRun Code Online (Sandbox Code Playgroud)\n\n注意:您的BeautifulSoup版本应该是4.7.0或更高版本,以便脚本支持伪选择器。