python:使用随机属性刮取站点
全面披露:我对网页抓取是全新的,我对html的经验非常有限。如果我做错了什么,或者你需要更多信息,请告诉我 私人内容:我的密码、我的用户名、我的学校、网站2 我的目标:浏览学校网页(python:使用随机属性刮取站点,python,html,web-scraping,web-crawler,Python,Html,Web Scraping,Web Crawler,全面披露:我对网页抓取是全新的,我对html的经验非常有限。如果我做错了什么,或者你需要更多信息,请告诉我 私人内容:我的密码、我的用户名、我的学校、网站2 我的目标:浏览学校网页(https://SITE2.MY_SCHOOL.edu/Main_Page.Asp?Page=Select_Subject),我可以通过我的学生帐户访问 网站信息:当我输入https://SITE2.MY_SCHOOL.edu/在浏览器上,我会被重定向到https://login.MY_SCHOOL.edu/?App
https://SITE2.MY_SCHOOL.edu/Main_Page.Asp?Page=Select_Subject
),我可以通过我的学生帐户访问
网站信息:当我输入https://SITE2.MY_SCHOOL.edu/
在浏览器上,我会被重定向到https://login.MY_SCHOOL.edu/?App=J4200
登录我的学校帐户
登录后,我会被重定向回https://SITE2.MY_SCHOOL.edu/Main_Page.Asp?Page=Select_Subject
(我要刮的页面)
问题:刷新https://login.MY_SCHOOL.edu/?App=J4200
,输入id/类型“password”的name属性随机化,输入名称“EncryptedStamp”的value属性随机化。我能够从加载的页面获得所有这些信息,如下所示。当我调用session.post('https://login.MY_SCHOOL.edu/?App=J4200,数据=形式)
导入请求,lxml.html
s=请求。会话()
login=s.get(“https://login.MY_SCHOOL.edu/")
login\u html=lxml.html.fromstring(login.text)
hidden_inputs=login_html.xpath(r'//form//input[@type=“hidden”]”)
#输入类型“password”的名称标记在刷新时会更改
#请参见下面的示例表单
password\u input=login\u html.xpath(r'//form//input[@type=“password”]”)
密码\名称标签=密码\输入[0]。名称
jse_id=s.cookies['JSESSIONID']
#创建用作POST请求的“数据”参数的dict
form={x.attrib[“name”]:x.attrib[“value”]用于隐藏的_输入中的x}
表单['AlternateID']=“我的用户名”#AlternateID是用户名的名称标签
表单[密码\姓名标签]=“我的密码”
表格['JSSessionID']=jse_id
示例表格:
{'AlternateID': 'MY_USERNAME',
'App': 'MY_SCHOOLNet',
'EncryptedStamp': 'ZYWSNQLPJKMH',
'JSESSIONID': 'EFC8B3319A63332484DFE8F90E4E0272',
'MXVQY': 'MY_PASSWORD'}
答复:
重新运行所有表单行以更新表单:
{'AlternateID': 'MY_USERNAME',
'App': 'MY_SCHOOLNet',
'EncryptedStamp':'ZYWSNQLPJKMH',
'JSESSIONID':'EFC8B3319A63332484DFE8F90E4E0272',
'RYCSX': 'MY_PASSWORD'}
{'AlternateID':'MY_USERNAME',
“应用程序”:“我的学校网”,
“EncryptedStamp”:“ZYWSNQLPJKMH”,
“JSSessionId:”EFC8B319A6332484DFE8F90E4E0272“,
'RYCSX':'MY_PASSWORD'}
我认为解决方案是:在不刷新页面的情况下更新页面,以防止两个属性发生更改。但我不知道怎么做。谷歌说要使用JQuery,但这是一个陡峭的学习曲线,我甚至可能得不到结果
感谢阅读,我期待任何建议。我用一个名为RoboBrowser的python库解决了我的问题 {'AlternateID': 'MY_USERNAME', 'App': 'MY_SCHOOLNet', 'EncryptedStamp':'ZYWSNQLPJKMH', 'JSESSIONID':'EFC8B3319A63332484DFE8F90E4E0272', 'RYCSX': 'MY_PASSWORD'}