在 python 中创建与订阅站点的连接

Creating a connection to a subscription site in python

我正在寻找与 python 到 http://www.horseandcountry.tv 的连接,它通过 POST 方法获取我的登录参数。我想打开一个到这个网站的连接,以便抓取该网站的所有视频链接(这个,我也不知道该怎么做,但正在使用该项目来学习)。

我的问题是如何将我的凭据传递到网站的各个页面?例如,如果我只想使用 python 代码打开浏览器 window 指向 http://play.horseandcountry.tv/live/ 并在我已经登录的情况下打开它,我该怎么做?

据我所知,您有两种选择,具体取决于您想要抓取的方式和需要抓取的内容:

1) 使用urllib。您可以使用必要的登录凭据执行 POST 请求。这是低级别的解决方案,这意味着它很快,但不能处理像 javascript 代码这样的高级内容。

2) 使用selenium。您可以通过 python 代码模拟浏览器(Chrome、Firefox 等)和 运行 操作。然后它要慢得多,但也适用于 "sophisticated" 个网站。

我通常做的:我尝试第一个选项,如果在网站上遇到 javascript 安全层之类的问题,则选择选项 2。此外,selenium 可以从你的桌面,让你看到你的报废。

无论如何,只需谷歌 "urllib/selenium login to website",您就会找到您需要的。

您也可以使用 requests 模块。它是最受欢迎的之一。这里有一些与您想做什么有关的问题。

Log in to website using Python Requests module

如果你想避免使用 Selenium(打开网络浏览器),你可以去请求,它可以登录网站并在后台抓取你需要的任何东西。

以下是您如何通过请求登录该网站。

import requests
from bs4 import BeautifulSoup

#Login Form Data
payload = { 
    'account_email': 'your_email',
    'account_password': 'your_passowrd',
    'submit':   'Sign In'
}

with requests.Session() as s:
    #Login to the website.
    response = s.post('https://play.horseandcountry.tv/login/', data=payload)

    #Check if logged in successfully
    soup = BeautifulSoup(response.text, 'lxml')
    logged_in = soup.find('p', attrs={'class': 'navbar-text pull-right'})
    print s.cookies
    print response.status_code
    if logged_in.text.startswith('Logged in as'):
        print 'Logged In Successfully!'

如果你需要解释,你可以查看这个answer, or requests documentation