我有一个使用cURL来抓取网站元素的应用。 我已经开始收到一些看起来像这样的错误:
你见过这个吗? 如果是这样,我该如何解决它?"不可接受!
不可接受!
在此服务器上找不到所请求资源的适当表示。此错误由Mod_Security生成。
"
我检查了2个与我做同样事情的网站,一切正常
关于cURL,这就是我使用的:
public function cURL_scraping($url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_setopt($curl,CURLOPT_HTTPHEADER,array('Expect:'));
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt($curl, CURLOPT_ENCODING, 'identity');
$response['str'] = curl_exec($curl);
$response['header'] = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
return $response;
}
答案 0 :(得分:1)
我找到了原因。我删除了用户代理,它的工作原理。我猜服务器阻止了这个特定的用户代理。
答案 1 :(得分:0)
看起来你正在抓的网站设置了一个检测和阻止抓取。要检查这一点,您可以尝试从同一个IP和/或所有相同的标题获取网页。
如果是这种情况,你真的应该尊重网站所有者希望不被刮掉。您可以询问他们,或者尝试对他们的网站进行可接受的搜索。你读过他们的robots.txt
吗?
错误通常会超时,但可能是永久性的。在这种情况下,您可能需要更改IP地址再试一次。
答案 2 :(得分:0)
我遇到了同样的错误,我只是在玩耍,找到了答案。
如果您了解一些基本的python,就很容易用您正在使用的语言来更改相关代码。
我刚刚添加了一个标题,
headers = {
"User-Agent":
"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"
}
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')
这可行!