我尝试在website上执行请求 在输入框“\u regidTextBox”中,你可以输入一个ID,这样它就可以选择一个游泳者。 我看到,POST请求执行302,GET请求的值为swimerId=123456(例如)
现在我想用Python来做这个,所以我不需要手动填充表单。 我的代码如下所示:
import requests
from bs4 import BeautifulSoup as soup
import urllib.request
import urllib.parse
from urllib.error import HTTPError
my_url = "http://dsvdaten.de/Modules/Results/Individual.aspx"
dsvID = "283621"
my_url_get = "http://dsvdaten.de/Modules/Results/Individual1.aspx?SwimmerID=" + dsvID
dsvDic = {"SwimmerID": dsvID}
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip,deflate',
'Accept-Language': 'de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7',
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0',
'Host': 'dsvdaten.de',
'Referer': 'http://dsvdaten.de/Modules/Results/Individual.aspx?Lang=de-DE',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
def get_data(url):
payload = {"__VIEWSTATE": "", "__VIEWSTATEGENERATOR": "", "__EVENTVALIDATION": "", "SwimmerID": "283621"}
try:
session_req = urllib.request.urlopen(url, timeout=10)
page_html = session_req.read()
except ConnectionError as ConErr:
print("Es ist ein Fehler aufgetreten!")
print(ConErr)
page_soup = soup(page_html, "html.parser")
viewstate = page_soup.find("input", {"id": "__VIEWSTATE"}).get("value")
payload["__VIEWSTATE"] = viewstate
viewstategenerator = page_soup.find("input", {"id": "__VIEWSTATEGENERATOR"}).get("value")
payload["__VIEWSTATEGENERATOR"] = viewstategenerator
eventvalidation = page_soup.find("input", {"id": "__EVENTVALIDATION"}).get("value")
payload["__EVENTVALIDATION"] = eventvalidation
return payload
def get_open_url(my_url, dsvDic, headers): # GET Methode
encodedFields = urllib.parse.urlencode(dsvDic).encode("utf-8")
req = urllib.request.Request(url=my_url, data=encodedFields, headers=headers)
try:
conn = urllib.request.urlopen(req)
resp = conn.read()
print(resp)
conn.close()
return resp
except HTTPError as e:
error = e.read()
payload = get_data(my_url)
dsvDic.update(payload)
get_open_url(my_url_get, dsvDic, headers)
我确实得到了响应(http200),但不是正确的游泳者(看起来像不活跃的游泳者,idk)。如果我在浏览器(F-12)中操作请求,我会得到相同的结果
如果有人会给一个提示,链接或改进代码,将是很好的tho
目前没有回答
相关问题 更多 >
编程相关推荐