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

时间:2018-06-18 15:04:51

标签: python web-scraping beautifulsoup python-requests

下面有一个python requests / beatiful soup code,可以让我成功登录网址。但是,登录后,要获取我需要的数据通常必须手动:

1)点击声明'在第一行:

enter image description here

2)选择日期,点击'运行语句':

enter image description here

3)查看数据:

enter image description here

这是我用来登录以进入上述第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步):

enter image description here ]

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

enter image description here

3 个答案:

答案 0 :(得分:0)

使用selenium webdriver,它有很多很好的功能来处理Web服务。

答案 1 :(得分:0)

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

  

pip install selenium

那将安装selenium但你还需要安装geckodriver(用于Firefox)或chromedriver(用于chrome) 然后你就应该开始运作了!

答案 2 :(得分:0)

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

这种方法的成功与否取决于网页的构建方式以及数据文件的可用性(如果视图数据中的“另存为CSV”是您的目标)。

如果登录机制是基于cookie的,您可以在请求中使用SessionsCookies。提交登录表单时,会在响应标头中返回cookie。您可以在任何后续页面请求中添加cookie以请求标题,以使您的登录成为可能。

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