Tôi đang sử dụng urlretrieve từ mô-đun urllib.Urlretrieve và User-Agent? - Python
Tôi dường như không thể tìm cách thêm mô tả Tác nhân người dùng vào yêu cầu của mình.
Có thể với urlretrieve không? hoặc tôi có cần sử dụng phương pháp khác không?
Tôi đang sử dụng urlretrieve từ mô-đun urllib.Urlretrieve và User-Agent? - Python
Tôi dường như không thể tìm cách thêm mô tả Tác nhân người dùng vào yêu cầu của mình.
Có thể với urlretrieve không? hoặc tôi có cần sử dụng phương pháp khác không?
Tôi không nghĩ rằng nó có thể với urlretrieve - ít nhất là không dễ dàng. Tôi sẽ đề xuất để tạo ra một đối tượng urllib2.Request và vượt qua các tiêu đề cần thiết cho nó. Xem
http://docs.python.org/library/urllib2.html#urllib2.urlopen
cho ví dụ.
Bạn có thể sử dụng các lớp URLopener hoặc FancyURLopener. Đối số 'phiên bản' chỉ định tác nhân người dùng của đối tượng mở.
opener = FancyURLopener({})
opener.version = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.69 Safari/537.36'
opener.retrieve('http://example.com', 'index.html')
Đầu tiên, thiết lập phiên bản:
urllib.URLopener.version = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0'
Sau đó:
filename, headers = urllib.urlretrieve(url)
Tôi biết vấn đề này đã có 7 năm. Và tôi đã đạt được vấn đề này bằng cách cố gắng tìm ra cách thay đổi User-Agent
trong khi sử dụng chức năng urlretrieve
.
Đối với những ai đạt vấn đề này bằng cách không may mắn, đây là cách tôi đã làm:
# proxy = ProxyHandler({'http': 'http://192.168.1.31:8888'})
proxy = ProxyHandler({})
opener = build_opener(proxy)
opener.addheaders = [('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30')]
install_opener(opener)
result = urlretrieve(url=file_url, filename=file_name)
Lý do tôi thêm vào proxy là để giám sát giao thông tại Charles, và đây là giao thông tôi nhận:
Xem xét sửa lỗi .phiên bản (nó quá nhỏ của bản chỉnh sửa để tôi thực hiện) – emartel