Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t使用请求从表中刮取名称_Python_Python 3.x_Web Scraping_Python Requests - Fatal编程技术网

Python Can';t使用请求从表中刮取名称

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

我试图从一个在网页中选择一些选项后填充的表中刮取名称。这是在该站点中生成表的方法。但是,当我尝试使用下面的脚本执行相同操作时,我总是获得状态500。我成功地使用了硒,所以我不想要任何基于硒的解决方案

到目前为止,我写过:

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())