在Python中使用request.post获取“<response [403] =”“>”

时间:2018-02-23 15:07:13

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

我试图从网站上获取搜索结果,但是我得到了 “响应[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)

2 个答案:

答案 0 :(得分:1)

首先,您不需要标题,因为您可以看到您已获得状态  代码200

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

如果您想搜索任何内容,可以看到网址更改为

  

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

答案 1 :(得分:1)

如果你检查HTML,你会发现form方法是GET(可能就是那个导致403错误的原因):

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

所以您只需要构建搜索网址:

#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") )