繁体   English   中英

带有请求的Python Web抓取-登录后

[英]Python web scraping with requests - after login

我在下面有一个python请求/佳汤代码,可让我成功登录到url。 但是,登录后,要获取我需要的数据,通常必须手动进行以下操作:

1)点击第一行中的“声明”:

在此处输入图片说明

2)选择日期,单击“运行语句”:

在此处输入图片说明

3)查看数据:

在此处输入图片说明

这是我用来登录到上面的步骤1的代码:

import requests
from bs4 import BeautifulSoup

logurl = "https://login.flash.co.za/apex/f?p=pwfone:login"
posturl = 'https://login.flash.co.za/apex/wwv_flow.accept'

with requests.Session() as s:
    s.headers = {"User-Agent":"Mozilla/5.0"}
    res = s.get(logurl)
    soup = BeautifulSoup(res.text,"html.parser")

    arg_names =[]
    for name in  soup.select("[name='p_arg_names']"):
        arg_names.append(name['value'])

    values = {
        'p_flow_id': soup.select_one("[name='p_flow_id']")['value'],
        'p_flow_step_id': soup.select_one("[name='p_flow_step_id']")['value'],
        'p_instance': soup.select_one("[name='p_instance']")['value'],
        'p_page_submission_id': soup.select_one("[name='p_page_submission_id']")['value'],
        'p_request': 'LOGIN',
        'p_t01': 'solar',
        'p_arg_names': arg_names,
        'p_t02': 'password',
        'p_md5_checksum': soup.select_one("[name='p_md5_checksum']")['value'],
        'p_page_checksum': soup.select_one("[name='p_page_checksum']")['value']
    }
    s.headers.update({'Referer': logurl})
    r = s.post(posturl, data=values)
    print (r.content)

我的问题是(初学者),我如何跳过第1步和第2步,并简单地使用选定的日期作为表单条目(下面的标题和表单信息)使用最终的URL更新和发布另一个标题? referral header是上面的第2步):

在此处输入图片说明 ]

编辑1:从csv文件下载的网络请求:

在此处输入图片说明

使用Selenium WebDriver,它具有很多很好的功能来处理Web服务。

硒将是自动浏览器交互的最佳选择。 它不仅可以用于从网站抓取数据,还可以与其他形式进行交互。 我强烈推荐它,因为我过去已经使用了很多。 如果您已经安装了pip和python,请继续输入

点安装硒

这将安装硒,但您还需要安装geckodriver(对于Firefox)或chromedriver(对于chrome),然后就可以启动并运行了!

正如其他人所建议的那样,Selenium是完成此类任务的好工具。 但是,我会尝试建议一种用于此目的的requests ,因为这就是您在问题中所要的。

这种方法的成功真正取决于网页的构建方式以及如何提供数据文件(如果您所针对的是视图数据中的“另存为CSV”)。

如果登录机制是基于Cookie的,则可以在请求中使用会话Cookies 当您提交登录表单时,响应头中将返回一个cookie。 您可以在随后的任何页面请求中将cookie添加到请求标头中,以使您的登录名正确。

另外,您应该在开发人员工具网络窗格中检查网络请求“另存为CSV”操作。 如果可以看到请求的结构,则可以在经过身份验证的会话中发出直接请求,并使用语句标识符和日期作为有效负载来获取结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM