无法使用请求从表中刮取名称

2024-10-04 01:33:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

webpage address

到目前为止,我写过:

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)

How can I scrape the names from that table using requests?


Tags: fromhttpsimportcomwithlinkparamsrequests
1条回答
网友
1楼 · 发布于 2024-10-04 01:33:12

当检查请求时,它确实有recaptcha保护,只是它处于一种不可见模式,只有在需要时才会显示,这甚至需要来自第一次调用的Cookie,否则它将给出无效的会话错误,因此对于recaptcha自动化解决方案(付费但相当便宜),他们的各种提供商为它提供ex:2Captcha,反验证码、CapMonster等 我使用了2Captcha,您可以按照下面的代码操作。 对2Captcha Library的引用

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

不要忘记更新上面代码中的Twocaptcha API KEY。 你可以使用任何你觉得合适的供应商。 输出将采用json格式,因此无需使用BeautifulSoup 输出: output

如果您有任何问题,请告诉我:)

相关问题 更多 >