วิธีใช้ Python เพื่อเข้าสู่หน้าเว็บและเรียกใช้คุกกี้เพื่อใช้ในภายหลัง


146

ฉันต้องการดาวน์โหลดและแยกวิเคราะห์เว็บเพจโดยใช้ไพ ธ อน แต่เพื่อเข้าใช้ฉันต้องการชุดคุกกี้สองชุด ดังนั้นฉันต้องลงชื่อเข้าใช้ผ่าน https ไปยังหน้าเว็บก่อน ช่วงเวลาการเข้าสู่ระบบเกี่ยวข้องกับการส่งสอง POST params (ชื่อผู้ใช้รหัสผ่าน) เพื่อ /login.php ในระหว่างคำขอเข้าสู่ระบบฉันต้องการดึงคุกกี้จากส่วนหัวการตอบสนองและเก็บไว้เพื่อให้ฉันสามารถใช้พวกเขาในคำขอเพื่อดาวน์โหลดหน้าเว็บ /data.php

ฉันจะทำสิ่งนี้ในไพ ธ อน (ยิ่งกว่า 2.6) ได้อย่างไร ถ้าเป็นไปได้ฉันต้องการใช้โมดูลในตัวเท่านั้น

คำตอบ:


147
import urllib, urllib2, cookielib

username = 'myuser'
password = 'mypassword'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username, 'j_password' : password})
opener.open('http://www.example.com/login.php', login_data)
resp = opener.open('http://www.example.com/hiddenpage.php')
print resp.read()

resp.read()คือ html ตรงของหน้าเว็บที่คุณต้องการเปิดและคุณสามารถใช้openerเพื่อดูหน้าใด ๆ โดยใช้คุกกี้เซสชันของคุณ


1
ปลอดภัยไหม สิ่งนี้จะไม่อนุญาตให้ผู้ตรวจจับแพ็คเก็ตเห็นรหัสผ่านธรรมดาหรือไม่ การใช้ Https จะปลอดภัยกว่านี้ไหม
Heartinpiece

2
@Heartinpiece ใช่ถ้าเซิร์ฟเวอร์เสนอให้คุณควรใช้ HTTPS
Harley Holcombe

ขอบคุณ ... แต่ลองนึกภาพเราเข้าสู่ระบบและต้องการโพสต์ sth ... วิธีการตั้งค่า coockie ในหัวข้อนี้สำหรับข้อมูลโพสต์?
MLSC

ขอแนะนำให้ใช้ไลบรารีคำขอหากคุณกำลังเขียนโค้ดขนาดใหญ่ (ประสบการณ์ส่วนตัว)
swapnil jariwala

157

นี่คือรุ่นที่ใช้ไลบรารี่คำขอที่ยอดเยี่ยม:

from requests import session

payload = {
    'action': 'login',
    'username': USERNAME,
    'password': PASSWORD
}

with session() as c:
    c.post('http://example.com/login.php', data=payload)
    response = c.get('http://example.com/protected_page.php')
    print(response.headers)
    print(response.text)

3
เป็น'action': 'login'จริงที่จำเป็นในตัวอย่างนี้หรือจะเป็นเพียงพารามิเตอร์พิเศษที่ส่งไปพร้อมกับคำขอหรือไม่
Ted

1
@Ted ส่วนนั้นมีความจำเป็นทั้งหมด
Sanghyun Lee

@Ted อาจจะจำเป็นในตัวอย่างนี้ มันไม่จำเป็นในโปรแกรมของฉัน
Highstaker

นี่คือสิ่งที่ดีที่สุดที่ฉันรู้ คุณอาจต้องข้อมูลตามเว็บไซต์
Jithin Pavithran
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.