javascript - 使用 POST 请求按下按钮并从 Python 中的弹出窗口中抓取数据
问题描述
我想按下“Suche starten”按钮并从这个页面上抓取一个研究项目的结果(基本上它可以在不填写任何表格的情况下按下 - 然后会打开一个弹出窗口,其中包含我想要的数据)。
https://www.insolvenzbekanntmachungen.de/cgi-bin/bl_suche.pl
基本上是德国公开宣布破产的公司。我已经花了相当多的时间试图让它运行,但不知何故我无法让它工作。我知道我也可以尝试使用 selenium 无头浏览器,但首先我更喜欢更清洁的请求解决方案,其次我希望能够毫不费力地在没有屏幕的情况下从服务器连续运行脚本。
所以到目前为止我所做的是,检查我的浏览器使用 Firefox 开发工具发送的发布请求,并尝试模拟发布请求。问题是我只能从初始窗口中获取标准数据,但不能从包含我想要的所有数据的打开窗口中获取。
所以我导入了请求库并创建了一个带有标头和有效负载的自定义请求。
headers={
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0',
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-GB,en;q=0.5",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"Content-Length": "413",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "www.insolvenzbekanntmachungen.de",
"Pragma": "no-cache",
"Referer": "https://www.insolvenzbekanntmachungen.de/cgi-bin/bl_suche.pl",
"Upgrade-Insecure-Requests": "1"
}
payload={
'Suchfunktion': 'uneingeschr',
'Absenden': 'Suche+starten',
'Bundesland': '-Hamburg',
'Gericht': 'Hamburg',
'Datum1':'',
'Datum2':'',
'Name':'',
'Sitz':'',
'Abteilungsnr':'',
'Registerzeichen': '--',
'Lfdnr':'',
'Jahreszahl': '--',
'Registerart': '--+keine+Angabe+--',
'select_registergericht':'',
'Registergericht': '--+keine+Angabe+--',
'Registernummer':'',
'Gegenstand': '--+Alle+Bekanntmachungen+innerhalb+des+Verfahrens+--',
'matchesperpage': '10',
'page': '1',
'sortedby': 'Datum',
'submit': 'return validate_globe(this)',
}
然后我提出以下要求:
r = requests.post('https://www.insolvenzbekanntmachungen.de/cgi-bin/bl_suche.pl',headers=headers,data=payload)
不幸的是 print(r.text) 不会给我弹出窗口中出现在浏览器中的数据。
任何帮助将不胜感激!
碧玉
解决方案
快速简便的修复将如下所示。搏一搏:
import requests
from bs4 import BeautifulSoup
URL = 'https://www.insolvenzbekanntmachungen.de/cgi-bin/bl_suche.pl'
payload = 'Suchfunktion=uneingeschr&Absenden=Suche+starten&Bundesland=--+Alle+Bundesl%E4nder+--&Gericht=--+Alle+Insolvenzgerichte+--&Datum1=&Datum2=&Name=&Sitz=&Abteilungsnr=&Registerzeichen=--&Lfdnr=&Jahreszahl=--&Registerart=--+keine+Angabe+--&select_registergericht=&Registergericht=--+keine+Angabe+--&Registernummer=&Gegenstand=--+Alle+Bekanntmachungen+innerhalb+des+Verfahrens+--&matchesperpage=10&page=1&sortedby=Datum'
with requests.Session() as s:
s.headers={"User-Agent":"Mozilla/5.0"}
s.headers.update({'Content-Type': 'application/x-www-form-urlencoded'})
res = s.post(URL, data = payload)
soup = BeautifulSoup(res.text, "lxml")
for item in soup.select("b li a"):
print(item.get_text(strip=True))
输出:
2018-07-05A & A Eco Clean Gebäudereinigung GmbH, München, 1503 IN 1836/16, Registergericht München, HRB 189121
2018-07-05A & A Eco Clean Gebäudereinigung GmbH, München, 1503 IN 1836/16, Registergericht München, HRB 189121
2018-07-05A + S Wohnungsbau Besitz GmbH & Co.KG, Kandel, 3 IN 96/12, Registergericht Landau in der Pfalz, HRA 21214
2018-07-05Abb Nicola, Untersöchering, IN 462/11
2018-07-05Abb Nicola, Untersöchering, IN 462/11
2018-07-05Abdul Basit Qureshi, Kirchheim, 13 IN 23/17
2018-07-05Abdul Basit Qureshi, Kirchheim, 13 IN 23/17
2018-07-05Abdul Basit Qureshi, Kirchheim, 13 IN 23/17
2018-07-05Abdulrahman, Oulat, Bottrop, 162 IN 76/12
2018-07-05Abdurachid Hassan, München, 1500 IK 2170/17
推荐阅读
- reactjs - 通过 index.js 重新导出 JSS 会导致不相关组件中出现不需要的重新渲染
- node.js - 从 mongodb 查找聚合中获取真或假(仅值不是数组或对象)
- python-3.x - 当我尝试使用 cv2.imshow() 打开图像时,会弹出一个空白图像窗口
- ios - JSON解码不填充表视图
- tfs - 如何配置 Team Foundation Server 2015 以强制所有工作区仅限本地?
- laravel - 在 apache 虚拟主机中部署多个 laravel 项目
- python - 只需要获取没有索引和数据类型Python的模式值
- python - 从 Python 中的不同目录导入
- php - 无法将 PayPal\Api\Amount 类型的对象用作数组
- blackberry - 无法创建调试令牌或签名栏文件