2017-04-16 13 views
1

私は最初の任期のプロジェクトで完全に失われたカーネギーメロンの新入生です。美しいスープを使用したリクエストはブロックされます

私は美しいスープを使ってリクエストをすると、私は「ボット」としてブロックされます。

import requests 
from bs4 import BeautifulSoup 

reddit1Link = requests.get("https://www.reddit.com/r/tensorflow/comments/650p49/question_im_a_techy_35_year_old_and_i_think_ai_is/") 
reddit1Content =BeautifulSoup(reddit1Link.content,"lxml") 
print(reddit1Content) 

次に、Redditからボットと思われるメッセージが表示されます。

  1. Beautiful Soupで可能な解決策はありますか? (私はCrawleraを使用するようにScrapyを試しましたが、Pythonの知識が不足しているため、使用できません)。初心者にとっては「直感的」であれば、有料サービスであれば構いません。つかいます。

本当にありがとうございます。

敬具、

アイザック・リー

答えて

1

ボットとしてブロックされている理由はさまざまです。

リクエストライブラリを「現状のまま」使用しているため、ブロックの可能性が最も高い原因は、ユーザーエージェントヘッダーが見つからないことです。

ボットとスクレイピングに対する最初の防衛策は、ユーザーエージェントのヘッダーが主要なブラウザの1つであることを確認し、ブラウザ以外のすべてのユーザーエージェントをブロックすることです。

ショートバージョン:

import requests 
from bs4 import BeautifulSoup 

headers = requests.utils.default_headers() 
headers.update({ 
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0', 
}) 

reddit1Link = requests.get("https://www.reddit.com/r/tensorflow/comments/650p49/question_im_a_techy_35_year_old_and_i_think_ai_is/", headers=headers) 
reddit1Content =BeautifulSoup(reddit1Link.content,"lxml") 
print(reddit1Content) 

Detailled説明: Sending "User-agent" using Requests library in Python

+0

ありがとう!出来た! – Isaac

+0

歓迎します:-) – rrschmidt

0

私はこのようなもののためMechanizeのを使用するために使用される、それは数年でしたが、それはまだ動作するはずです。

このような何か試してみてください:

from mechanize import Browser 
from bs4 import BeautifulSoup 

b = Browser() 
b.set_handle_robots(False) 
b.addheaders = [('Referer', 'https://www.reddit.com'), ('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 

b.open('https://www.reddit.com/r/tensorflow/comments/650p49/question_im_a_techy_35_year_old_and_i_think_ai_is/') 
soup = BeautifulSoup(b.response().read(), "html.parser") 

編集:私はちょうど悲しいことに、機械化、気づい

は、Python 2.5から2.7のための唯一のavailbleで、利用できるが、他のオプションがあります。 Installing mechanize for python 3.4

+0

おかげRaudbjornこれを試してみてください!これはPython 3では動作しませんか? – Isaac

+0

いいえ、申し訳ありませんが、私の編集された答えを見てください。 しかし、他のライブラリでは、ヘッダーを追加してロボットの操作を無効にすることができます。ちょっと絞り込むことが良いアイデアかもしれないし、 "捕まえられるかもしれない"ということを覚えておいて、それぞれの要求の後にtime.sleep(1)を使ってボットとして識別されないようにしてください。 – Raudbjorn

+0

ありがとうございました!!! – Isaac

関連する問題