我试图从网站上获取搜索结果,但是我得到了 “响应[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)
答案 0 :(得分:1)
首先,您不需要标题,因为您可以看到您已获得状态
代码200
:
>>> r = requests.get('https://www.metal-archives.com')
>>> r.status_code
200
如果您想搜索任何内容,可以看到网址更改为
这意味着,您可以使用以下方法直接对其进行格式化:
>>> 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") )