【问题标题】:Get "<Response [403]>" using request.post in Python在 Python 中使用 request.post 获取“<Response [403]>”
【发布时间】:2018-08-03 16:24:48
【问题描述】:

我试图从一个网站获取搜索结果,但是我得到了 “响应 [403]”消息,我发现类似的帖子通过向 request.post 添加标头来解决 403 错误,但它对我的问题不起作用。我应该怎么做才能正确得到我想要的结果?

from urllib.request import urlopen
import urllib.parse
import urllib.request
import requests
from bs4 import BeautifulSoup 

url="https://www.metal-archives.com/"
html= urlopen(url)
print("The keyword you entered to search is: %s\n" % 'Bathory')
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
result=requests.post(url, data='Bathory', headers=headers)
print(result.content)

【问题讨论】:

  • 如果您尝试使用浏览器访问该网站,您会得到 403 吗?
  • 问题不在于标题。这是data='Bathory'。您是否要搜索该词?
  • 我怀疑他们只是不想让你发布数据。如果您将脚本重写为获取,它将 200。但是,如果您尝试使用他们的搜索,您需要做的不仅仅是发布。 :)
  • sniperd - 不,它会显示搜索结果,但是在我得到的 html 中找不到结果。我之前确实得到了 200,你知道如果他们不希望我发布数据,有什么解决方法可以得到结果吗? KeyurPotdar - 是的,正是我要搜索的单词,它原本是一个变量,为了方便我这里把它改成一个字符串以便询问。

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


【解决方案1】:

如果您检查 HTML,您会发现 form 方法是 GET(可能这就是您收到 403 错误的原因):

<form id="search_form" action="https://www.metal-archives.com/search" method="get">

所以你只需要构建搜索 URL:

#Music genre search
result=requests.get( "https://www.metal-archives.com/search?searchString={0}&type=band_genre".format("Bathory") )
#Band name search
result=requests.get( "https://www.metal-archives.com/search?searchString={0}&type=band_name".format("Bathory") )

【讨论】:

  • 谢谢,我是HTML格式的新手,还有一点是下面的网页中显示了真实的结果,但是如何使用requests.get找到结果变量中的信息?页面是否故意隐藏信息?还有其他方法可以得到吗? metal-archives.com/…
【解决方案2】:

首先,您不需要标题,因为您可以看到您正在获取状态 代码200:

>>> r = requests.get('https://www.metal-archives.com')
>>> r.status_code
200

如果你想搜索任何东西,你可以看到url变成了

https://www.metal-archives.com/search?searchString=bathory

也就是说,你可以直接用这个来格式化它:

>>> keyword = 'bathory'
>>> r = requests.get('https://www.metal-archives.com/search?searchString='+keyword)
>>> r.status_code
200
>>> 'bathory' in r.text
True

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 2015-12-10
    • 2019-04-02
    相关资源
    最近更新 更多