【问题标题】:Avoid Cookie Expiration (Web Scraping)避免 Cookie 过期(网页抓取)
【发布时间】:2018-09-01 15:08:00
【问题描述】:

所以我正在使用 Python 为我学校的成绩册网站 Schoology 制作一个网络爬虫。到目前为止,它工作得很好,但我很烦恼地看到所有的 cookie 都会在几天后过期。有没有办法自动获取新的 cookie,这样我就不必每隔几天更换一次?我的学校使用“SSO”登录,您必须使用学校的谷歌帐户登录,这使事情变得有点复杂。我使用 CURL 来获取标题/cookie 信息。如果我的代码中还有什么可以改进的地方,请告诉我。这是我的代码:

# Schoology Web Scraper

import requests
from bs4 import BeautifulSoup

grades = []

headers = {
    # A bunch of headers / cookies that will expire
}

response = requests.get('https://monongalia.schoology.com/grades/grades', headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')

for item in soup.find_all('span', attrs={"class":"course-grade-value"}):
  grades.append(item.get_text())

print('\n'.join(grades))

【问题讨论】:

  • 您需要在脚本中自动登录和检索 cookie。您无法控制过期的 cookie
  • @OzzyWalsh 但是我可以用谷歌登录吗?
  • 应该是可以的。但这超出了 Stack Overflow 答案的范围。如果你可以用 curl 做到这一点,你很可能可以通过 python 做到这一点。
  • 随着 Ozzy Walsh 的评论,如果您转到 Chrome 的检查元素上的网络选项卡,开始记录网络日志,然后登录。您将能够看到登录表单提交的位置 (路径)以及与它相关的数据(用户名、密码、CSRF 令牌等)

标签: python-3.x cookies web-scraping beautifulsoup python-requests


【解决方案1】:

您可以让它通过登录并使用您可以使用的用户提供的凭据:

from bs4 import BeautifulSoup
import requests

##################

username=""
password=""
schoolID=""

##################

# ^ fill in these values ^

payload = {
"mail":username
"pass":password
"school_nid":
}

session = requests.Session()
response = session.post('https://monongalia.schoology.comlogin/ldap', data = payload)
# this will log you in using the credentials provided above

# continue with script below, all cookies will be saved without you needing to do 
# anything

将用户名和密码作为有效载荷发送到 url,使用 Session() 它将保留 整个脚本中的 cookie,因此您无需手动收集它们

【讨论】:

    猜你喜欢
    • 2023-01-02
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2020-06-18
    相关资源
    最近更新 更多