2008-10-09 65 views
138

Tôi muốn tải xuống và phân tích trang web bằng cách sử dụng python, nhưng để truy cập vào nó, tôi cần một vài tập hợp cookie. Do đó, tôi cần đăng nhập qua https tới trang web trước tiên. Thời điểm đăng nhập liên quan đến việc gửi hai tham số POST (tên người dùng, mật khẩu) tới /login.php. Trong yêu cầu đăng nhập, tôi muốn truy xuất cookie từ tiêu đề phản hồi và lưu trữ chúng để tôi có thể sử dụng chúng trong yêu cầu tải xuống trang web /data.php.Làm thế nào để sử dụng Python để đăng nhập vào một trang web và truy xuất cookie để sử dụng sau này?

Làm cách nào để thực hiện điều này trong python (tốt nhất là 2.6)? Nếu có thể, tôi chỉ muốn sử dụng các mô đun dựng sẵn.

Trả lời

144
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() là html thẳng của trang web mà bạn muốn mở, và bạn có thể sử dụng opener để xem bất kỳ trang sử dụng session cookie.

+9

'resp.read() 'sẽ cung cấp cho bạn những nội dung –

+1

Đây có phải là an toàn không? Điều này sẽ không cho phép gói sniffers để xem mật khẩu văn bản thô? Việc sử dụng Https có an toàn hơn không? – Heartinpiece

+2

@Heartinpiece Có, nếu máy chủ cung cấp, bạn nên sử dụng HTTPS. –

149

Dưới đây là một phiên bản sử dụng requests thư viện xuất sắc:

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) 
+27

+1 đây là cách hiện đại để làm điều đó trong python. –

+2

Là '' hành động ':' đăng nhập'' thực sự cần thiết trong ví dụ này hay chỉ là một tham số bổ sung được gửi cùng với yêu cầu? – Ted

+1

@Ted Phần đó là hoàn toàn cần thiết. –

Các vấn đề liên quan