使用Beautiful Soup的请求被阻止

时间:2017-04-16 18:07:29

标签: web-scraping beautifulsoup

我是Carnegie Mellon的新生,他在第一个任期内完全迷失了方向。

当我使用Beautiful Soup提出请求时,我被封锁为" bot"。

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. 通过美丽的汤有什么可能的解决方案? (我已经尝试使用Scrapy来使用它的Crawlera,但由于我缺乏python知识,我无法使用它。)我不介意它是否是付费服务,只要它是直观的&#34 34;足以让初学者使用。
  2. 我真的很感谢你的帮助。

    此致

    Isaac Lee

2 个答案:

答案 0 :(得分:8)

作为僵尸程序被阻止可能有多种原因。

当您按“原样”使用请求库时,阻止的最可能原因是缺少用户代理标头。

防范僵尸和抓取的第一道防线是检查用户代理标头是否来自其中一个主要浏览器并阻止所有非浏览器用户代理。

简短版:试试这个:

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)

详细说明: Sending "User-agent" using Requests library in Python

答案 1 :(得分:2)

我过去常常使用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,但是还有其他选择。见Installing mechanize for python 3.4