Tôi cần truy cập một vài trang HTML thông qua tập lệnh Python, vấn đề là tôi cần chức năng COOKIE, do đó yêu cầu HTTP urllib đơn giản sẽ không hoạt động.Mô phỏng trình duyệt - Python
Bất kỳ ý tưởng nào?
Tôi cần truy cập một vài trang HTML thông qua tập lệnh Python, vấn đề là tôi cần chức năng COOKIE, do đó yêu cầu HTTP urllib đơn giản sẽ không hoạt động.Mô phỏng trình duyệt - Python
Bất kỳ ý tưởng nào?
séc ra Mechanize. "Trình duyệt web có lập trình trạng thái trong Python".
Nó xử lý cookie tự động.
import mechanize
br = mechanize.Browser()
resp = br.open("http://www.mysitewithcookies.com/")
print resp.info() # headers
print resp.read() # content
cơ giới hóa cũng hiển thị API urllib2, với xử lý cookie được bật theo mặc định.
Có thể khá chậm mặc dù, vì vậy YMMV. –
Gregg, bạn có thể giải thích? về cơ bản của nó chỉ là một wrapper xung quanh urllib2 –
@Gregg bạn có thể giải thích? : D – RadiantHex
Dưới đây là điều gì đó thực hiện cookie và làm tiền thưởng thực hiện xác thực cho trang web yêu cầu tên người dùng và mật khẩu.
import urllib2
import cookielib
import string
def cook():
url="http://wherever"
cj = cookielib.LWPCookieJar()
authinfo = urllib2.HTTPBasicAuthHandler()
realm="realmName"
username="userName"
password="passWord"
host="www.wherever.com"
authinfo.add_password(realm, host, username, password)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), authinfo)
urllib2.install_opener(opener)
# Create request object
txheaders = { 'User-agent' : "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)" }
try:
req = urllib2.Request(url, None, txheaders)
cj.add_cookie_header(req)
f = urllib2.urlopen(req)
except IOError, e:
print "Failed to open", url
if hasattr(e, 'code'):
print "Error code:", e.code
else:
print f
print f.read()
print f.info()
f.close()
print 'Cookies:'
for index, cookie in enumerate(cj):
print index, " : ", cookie
cj.save("cookies.lwp")
@Mark: cảm ơn bạn rất nhiều! Điều này làm việc hoàn hảo! – RadiantHex
có thể bạn nên chấp nhận câu trả lời, RH, nếu bạn làm việc này cho bạn. –
cookielib module cung cấp xử lý cookie cho khách hàng HTTP.
Mô-đun cookielib xác định các lớp để tự động xử lý cookie HTTP. Nó rất hữu ích để truy cập các trang web yêu cầu các mẩu dữ liệu nhỏ - cookie - được đặt trên máy khách bằng phản hồi HTTP từ máy chủ web và sau đó quay lại máy chủ trong các yêu cầu HTTP sau này.
Các ví dụ trong chương trình doc làm thế nào để xử lý các tập tin cookie kết hợp với urllib
:
import cookielib, urllib2
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")
Tại sao bạn không thử Dryscrape cho việc này:
Import dryscrape as d
d.start_xvfb()
Br = d.Session()
Br.visit('http://URL.COM')
#open webpage
Br.at_xpath('//*[@id = "email"]').set('[email protected]')
#finding input by id
Br.at_xpath('//*[@id = "pass"]').set('pasword')
Br.at_xpath('//*[@id = "submit_button"]').click()
#put id of submit button and click it
Bạn không cần Cookie lib để lưu trữ các tập tin cookie chỉ cần cài đặt Dryscrape và làm điều đó trong phong cách của bạn
Một số triển khai dựa trên JavaScript của Python có sẵn (có thể chạy trong trình duyệt web mà không cần bất kỳ plugin bổ sung nào). Điều này có liên quan không? http://syntensity.com/static/python.html –