【发布时间】:2021-09-20 03:55:22
【问题描述】:
我正在尝试抓取这个网站:https://case.occ.ok.gov/ords/f?p=1004:203
难题的缺失部分是在发出最终请求之前弄清楚如何“获取”数据负载中的p_request 参数。在查看“主”页面时,此字段为空,因此无法使用该字段传递给我的 POST 请求。
下面的代码不起作用,因为我在有效负载中有一个空白的p_request 参数,尽管我通过开发者控制台的测试知道,如果我能够获得p_request 字段,它将起作用。
# Query Main Site to Build Payload
url = 'https://case.occ.ok.gov/ords/f?p=1004:203'
r = requests.get(url)
soup = BeautifulSoup(r.text,'lxml')
# Get Cookie
cookies = {}
cookdat = r.cookies
cookies['ORA_WWV_APP_1004'] = cookdat.get('ORA_WWV_APP_1004')
cookies['X-Oracle-BMC-LBS-Route'] = cookdat.get('X-Oracle-BMC-LBS-Route')
# Create Payload
inputs = soup.select('input')
d_inputs = {i['id']:i.get('value','') for i in inputs}
data = [
('p_flow_id', '1004'),
('p_flow_step_id', '203'),
('p_instance', '%s'%d_inputs['pInstance']),
('p_debug', ''),
('p_request', ''),
('p_widget_name', 'worksheet'),
('p_widget_mod', 'PULL'),
('p_widget_action', ''),
('p_widget_num_return', '100000'),
('x01', '8980043036046866'),
('x02', '8985720770049096'),
('f01', 'R8980010866046866_column_search_current_column'),
('f01', 'R8980010866046866_search_field'),
('f01', 'R8980010866046866_row_select'),
('f02', ''),
('f02', ''),
('f02', '50'),
('p_json', '{"pageItems":{"itemsToSubmit":[{"n":"P203_LASTNAME","v":"%s"},{"n":"P203_FIRSTNAME","v":""},{"n":"P203_SEARCH_CRITERIA","v":"1"}],"protected":"%s","rowVersion":"","formRegionChecksums":[]},"salt":"%s"}'%(letter,d_inputs['pPageItemsProtected'],d_inputs['pSalt'])),
]
# POST request retrieve data
r = requests.post('https://case.occ.ok.gov/ords/wwv_flow.ajax', cookies=cookies, data=data)
print(r.text)
在开发者控制台中,我看到这个字段在进行我想要的提交类型时出现,即使它在主页上是空白的:
我如何“检索”这个字段,这是请求工作所必需的?
【问题讨论】:
-
你想从那个页面抓取什么?你面临什么问题?我们没有时间检查您提供的所有代码并检查每一行。所以,请尝试以非常简单的方式提供足够的详细信息,我正在尝试这样做,这是我的代码,我正面临这个问题,我有这个想法,我在研究时发现了这个。
-
我发现参数
p的模式在第一个1004:203:中是这样的,总是相同的,即。直到他们手动更新,但这也在<html>标签中。像这样<html class="page-203 app-1004" lang="en"><head>和:之后有 si 14 个随机数,对于可以在 ID 为pInstance的input标记中找到的每个搜索,这将是不同的,但这是转折 -
当您提交
form时,它首先将您在data变量中提供的请求+数据发送到https://case.occ.ok.gov/ords/wwv_flow.accept,并且仅重定向到具有这些参数的网站。因此,我认为您还必须将更改后的数据发送到flow_accept,然后只有您才能在参数网站中获得结果。参数网站的意思是:https://case.occ.ok.gov/ords/f?p=1004:203:18186253354351::NO:::url,包含您要发送的所有参数。 -
感谢您深入了解!是的,我也看到了,初始 POST 转到 flow_accept,我假设我会从帖子的响应中获取 instance_id。但是,我在该网站上玩耍时注意到的是,即使我更改了搜索词,instance_id 也保持不变,但是以某种方式进行搜索会更改实例的状态,如果我请求该 instance_id,我将获得新的搜索词。例如。如果我去(在浏览器中)提交新搜索,然后在 Python 中拉取 instance_id,即使 instance_id 没有改变,它也会返回新数据。
-
是的!我也注意到了这一点。我认为他们将其保存在他们的服务器或
web-storage中。但最重要的是,你的问题解决了吗?
标签: python web-scraping python-requests