Python Can';t使用请求从表中刮取名称
我试图从一个在网页中选择一些选项后填充的表中刮取名称。这是在该站点中生成表的方法。但是,当我尝试使用下面的脚本执行相同操作时,我总是获得状态500。我成功地使用了硒,所以我不想要任何基于硒的解决方案 到目前为止,我写过:Python Can';t使用请求从表中刮取名称,python,python-3.x,web-scraping,python-requests,Python,Python 3.x,Web Scraping,Python Requests,我试图从一个在网页中选择一些选项后填充的表中刮取名称。这是在该站点中生成表的方法。但是,当我尝试使用下面的脚本执行相同操作时,我总是获得状态500。我成功地使用了硒,所以我不想要任何基于硒的解决方案 到目前为止,我写过: import requests from bs4 import BeautifulSoup link = 'https://rederef-saude.appspot.com/proximidade/prestador/buscar?' params = { 'c
import requests
from bs4 import BeautifulSoup
link = 'https://rederef-saude.appspot.com/proximidade/prestador/buscar?'
params = {
'canal': '1',
'latitude': '-23.5505199',
'longitude': '-46.63330939999999',
'categoria': '1',
'produto': '557',
'plano': '18051',
'nome': '',
'qualificacoes': '',
'prefixoEmpresa': '',
'empresa': '',
'especialidade': '',
'procedimento': '',
'tipoPesquisaProcedimento': '1',
'raio': '200000'
}
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36',
'referer': 'https://rederef-saude.appspot.com/rederef/buscaPrestadores?login=publico&canal=1&data=23/04/2021&hora=00:16:55&tipoProduto=M&produto=557&plano=18051',
'x-requested-with': 'XMLHttpRequest',
'content-type': 'application/json;charset=utf-8',
'accept': '*/*',
'captcha-token': ''
}
with requests.Session() as s:
s.headers = headers
res = s.get(link,params=params)
print(res.status_code)
如何使用请求从该表中刮取名称
当检查请求时,它确实有recaptcha保护,只是它处于一种不可见模式,只有在需要时才会显示,这甚至需要来自第一次调用的Cookie,否则它将给出无效的会话错误,因此对于recaptcha自动化解决方案(付费但相当便宜),他们的各种提供商为它提供ex:2Captcha,反验证码、CapMonster等 我使用了2Captcha,您可以按照下面的代码操作。 提及 不要忘记更新上述代码中的
Twocaptcha API密钥
。
你可以使用任何你觉得合适的供应商。
输出将采用json格式,因此无需使用BeautifulSoup
输出:
如果您有任何问题,请告诉我:)在检查请求时,它确实具有recaptcha保护,只是它处于一种不可见模式,只有在需要时才会显示,这甚至需要第一次调用时的cookies,否则它将给出无效会话错误,因此对于recaptcha自动解决方案(付费但非常便宜)他们的各种it提供商,例如:2Captcha、反验证码、CapMonster等 我使用了2Captcha,您可以按照下面的代码操作。 提及 不要忘记更新上述代码中的
Twocaptcha API密钥
。
你可以使用任何你觉得合适的供应商。
输出将采用json格式,因此无需使用BeautifulSoup
输出:
如果您有任何问题,请告诉我:)不要将
?
放在您的URL中<代码>请求将在添加参数时添加它。你确定这是一个GET请求,而不是POST?是的,这是一个GET请求。关于recaptcha的一些事情?当我使用selenium创建脚本时,我没有遇到任何验证码,所以我想它是一个占位符。Chrome也不会向你提供验证码,但是如果你从F12网络选项卡记录会话,那里会发生很多事情,我不太熟悉recaptcha,但我想这很重要。selenium是否在captcha令牌参数中设置了某些内容?不要将?
放在URL中<代码>请求将在添加参数时添加它。你确定这是一个GET请求,而不是POST?是的,这是一个GET请求。关于recaptcha的一些事情?当我使用selenium创建脚本时,我没有遇到任何验证码,所以我想它是一个占位符。Chrome也不会向你提供验证码,但是如果你从F12网络选项卡记录会话,那里会发生很多事情,我不太熟悉recaptcha,但我想这很重要。selenium是否在captcha令牌参数中设置了一些内容?在Recaptcha所在的页面上,您可以在解算器中使用该页面的URL,或者在最后仅使用主域,我猜解算器将只向解算器服务器发送一个域。我错误地使用了ajax URL,但两者的域是相同的,所以这并不重要。我仅使用基本域修改了代码。在Recaptcha所在的页面上,您可以在解算器中使用该页面的URL,或者在最后仅使用主域,我猜解算器将只向解算器服务器发送一个域。我错误地使用了ajax URL,但两者的域是相同的,所以这并不重要。我只修改了基本域的代码。
import requests
from twocaptcha import TwoCaptcha
solver = TwoCaptcha('Twocaptcha API KEY')
result = solver.recaptcha(sitekey='6LdOzkUaAAAAANV9z7gQOokV2kNWI8WI_eSH80vC',
url='https://rederef-saude.appspot.com', invisible=1)["code"]
params = {
'login': 'publico',
'canal': 1,
'data': '23/04/2021',
'hora': '04:10:41',
'tipoProduto': 'M',
'produto': 557,
'plano': 18051
}
cookies = requests.get(
'https://rederef-saude.appspot.com/rederef/buscaPrestadores', params=params).cookies
headers = {
'captcha-token': result,
}
params = {
'canal': '1',
'latitude': '-23.5505199',
'longitude': '-46.63330939999999',
'categoria': '1',
'produto': '557',
'plano': '18051',
'nome': '',
'qualificacoes': '',
'prefixoEmpresa': '',
'empresa': '',
'especialidade': '',
'procedimento': '',
'tipoPesquisaProcedimento': '1',
'raio': '200000'
}
response = requests.get('https://rederef-saude.appspot.com/proximidade/prestador/buscar', headers=headers,
params=params, cookies=cookies)
print(response.json())