如何绕过机器人检测并使用python抓取网站

时间:2020-04-24 03:35:56

标签: python web-scraping beautifulsoup python-requests botdetect

问题

我不熟悉网络抓取功能,我试图创建一个抓取器,它可以查看播放列表链接并获取音乐和作者的列表。

但是该站点一直拒绝我的连接,因为它认为我是一个机器人,所以我使用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)

网站链接

playlist link

html我在使用请求时得到

html with blank space where the playlist was supposed to be

2 个答案:

答案 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 재생 - 새 창 或更高版本,以便脚本支持伪选择器。