Hướng dẫn dùng python requests.get python
Vietnamese (Tiếng Việt) translation by Dai Phong (you can also view the original English article) Requests là một mô-đun Python mà bạn có thể sử dụng để gửi tất cả các loại yêu cầu HTTP. Đây là một thư viện dễ sử dụng với nhiều tính năng khác nhau, từ việc truyền các tham số trong URL cho đến gửi các header tùy biến và Xác minh SSL. Trong hướng dẫn này, bạn sẽ được học cách sử dụng thư viện requests để gửi các yêu cầu HTTP đơn giản bằng Python. Bạn có thể sử dụng Requests với Python phiên bản 2.6-2.7 và 3.3-3.6. Trước khi tiếp tục, bạn nên biết rằng Requests là một mô-đun bên ngoài, do đó bạn sẽ phải cài đặt nó trước khi chạy thử các ví dụ trong hướng dẫn này. Bạn có thể cài đặt nó bằng cách chạy lệnh sau đây trong terminal: pip install requests Một khi bạn đã cài đặt mô-đun, bạn có thể kiểm tra nó đã được cài đặt thành công hay chưa bằng cách import nó bằng lệnh này: import requests Nếu cài đặt thành công, bạn sẽ không thấy bất kỳ thông báo lỗi nào. Tạo một Yêu cầu GETRất dễ để gửi một yêu cầu HTTP bằng Requests. Bạn bắt đầu bằng cách import module và sau đó thực hiện yêu cầu. Dưới đây là một ví dụ: import requests req = requests.get('https://tutsplus.com/') Tất cả các thông tin về yêu cầu của chúng ta bây giờ được lưu trữ trong một đối tượng Response được gọi là req.encoding # returns 'utf-8' req.status_code # returns 200 Bạn có thể truy cập các cookie mà máy chủ đã gửi lại bằng Bạn có thể kiểm tra xem phản hồi có phải là một redirect HTTP đúng ngữ pháp mà có thể đã được xử lý tự động bằng thuộc tính URL mà bạn truyền cho hàm import requests req = requests.get('http://www.tutsplus.com/') req.encoding # returns 'utf-8' req.status_code # returns 200 req.elapsed # returns datetime.timedelta(0, 1, 666890) req.url # returns 'https://tutsplus.com/' req.history # returns [ Nhận tất cả các thông tin này về trang web mà bạn đang truy cập là điều rất tốt, nhưng có thể bạn muốn truy cập vào nội dung thật sự. Nếu nội dung mà bạn đang truy cập là văn bản, bạn có thể sử dụng thuộc tính Trong
trường hợp phản hồi không phải là văn bản, bạn có thể truy cập chúng dưới dạng nhị phân bằng Bạn cũng có thể lấy được phản hồi gốc từ máy chủ bằng Một số tập
tin mà bạn tải xuống từ Internet sử dụng mô-đun Requests có thể có một kích thước rất lớn. Trong những trường hợp như vậy, không nên tải toàn bộ phản hồi hoặc tập tin vào bộ nhớ cùng một lúc. Bạn có thể tải xuống từng phần hoặc khối của một tập tin bằng phương thức Phương thức này lặp qua dữ liệu phản hồi bằng số byte Khi Hãy tải hình ảnh khu rừng trên Pixabay bằng mô-đun Requests. Đây là hình ảnh thực tế: Đây là code mà bạn cần: import requests req = requests.get('path/to/forest.jpg', stream=True) req.raise_for_status() with open('Forest.jpg', 'wb') as fd: for chunk in req.iter_content(chunk_size=50000): print('Received a Chunk') fd.write(chunk)
Requests cũng cho phép bạn truyền các tham số trong một URL. Điều này có thể hữu ích khi bạn đang tìm kiếm trang web để lấy một số kết quả như hình ảnh hoặc bài hướng dẫn cụ thể. Bạn có thể cung cấp các chuỗi truy vấn này như là một dictionary bằng từ khóa import requests query = {'q': 'Forest', 'order': 'popular', 'min_width': '800', 'min_height': '600'} req = requests.get('https://pixabay.com/en/photos/', params=query) req.url # returns 'https://pixabay.com/en/photos/?order=popular&min_height=600&q=Forest&min_width=800' Tạo một Yêu cầu POSTTạo một yêu cầu POST cũng tương tự như yêu cầu GET. Bạn chỉ cần sử dụng hàm import requests req = requests.post('https://en.wikipedia.org/w/index.php', data = {'search':'Nanotechnology'}) req.raise_for_status() with open('Nanotechnology.html', 'wb') as fd: for chunk in req.iter_content(chunk_size=50000): fd.write(chunk) Gởi Cookie và HeaderNhư đã đề cập ở trên, bạn có thể truy cập các cookie và header mà máy chủ gửi lại cho bạn bằng Để thêm các header HTTP vào yêu cầu, bạn chỉ cần truyền chúng trong một import requests url = 'http://some-domain.com/set/cookies/headers' headers = {'user-agent': 'your-own-user-agent/0.0.1'} cookies = {'visit-month': 'February'} req = requests.get(url, headers=headers, cookies=cookies) Cookie cũng có thể được truyền thông qua trong một Cookie Jar. Chúng cung cấp một giao diện đầy đủ hơn để cho phép bạn sử dụng các cookie đó trên nhiều đường dẫn. Dưới đây là một ví dụ: import requests jar = requests.cookies.RequestsCookieJar() jar.set('first_cookie', 'first', domain='httpbin.org', path='/cookies') jar.set('second_cookie', 'second', domain='httpbin.org', path='/extra') jar.set('third_cookie', 'third', domain='httpbin.org', path='/cookies') url = 'http://httpbin.org/cookies' req = requests.get(url, cookies=jar) req.text # returns '{ "cookies": { "first_cookie": "first", "third_cookie": "third" }}' Các Đối tượng SessionĐôi khi cần phải giữ nguyên các tham số nhất định trên nhiều yêu cầu. Đối tượng Session xử lý chính xác điều đó. Ví dụ, nó sẽ giữ dữ liệu cookie trên tất cả các yêu cầu được thực hiện bằng cùng một session. Đối tượng Session sử dụng connection-pooling của urllib3. Điều này có nghĩa là kết nối TCP bên dưới sẽ được sử dụng lại cho tất cả các yêu cầu được thực hiện đến cùng một máy chủ. Điều này có thể gia tăng đáng kể hiệu suất. Bạn cũng có thể sử dụng các phương thức của đối tượng Requests với đối tượng Session. Dưới đây là ví dụ về nhiều yêu cầu được gửi bằng cách sử dụng và không sử dụng session: import requests reqOne = requests.get('https://tutsplus.com/') reqOne.cookies['_tuts_session'] #returns 'cc118d94a84f0ea37c64f14dd868a175' reqTwo = requests.get('https://code.tutsplus.com/tutorials') reqTwo.cookies['_tuts_session'] #returns '3775e1f1d7f3448e25881dfc35b8a69a' ssnOne = requests.Session() ssnOne.get('https://tutsplus.com/') ssnOne.cookies['_tuts_session'] #returns '4c3dd2f41d2362108fbb191448eab3b4' reqThree = ssnOne.get('https://code.tutsplus.com/tutorials') reqThree.cookies['_tuts_session'] #returns '4c3dd2f41d2362108fbb191448eab3b4' Như bạn thấy, cookie session có một giá trị khác nhau trong yêu cầu thứ nhất và thứ hai, nhưng nó có cùng giá trị khi chúng ta sử dụng đối tượng Session. Bạn sẽ nhận được một giá trị khác khi thử code này, nhưng cũng tương tự, cookie cho các yêu cầu được thực hiện bằng cách sử dụng đối tượng Session sẽ có cùng giá trị. Session cũng hữu ích khi bạn muốn gửi dữ liệu tương tự trên tất cả các yêu cầu. Ví dụ, nếu bạn quyết định gửi một cookie hoặc một header user-agent với tất cả các yêu cầu đến một tên miền nhất định, bạn có thể sử dụng các đối tượng Session. Dưới đây là một ví dụ: import requests ssn = requests.Session() ssn.cookies.update({'visit-month': 'February'}) reqOne = ssn.get('http://httpbin.org/cookies') print(reqOne.text) # prints information about "visit-month" cookie reqTwo = ssn.get('http://httpbin.org/cookies', cookies={'visit-year': '2017'}) print(reqTwo.text) # prints information about "visit-month" and "visit-year" cookie reqThree = ssn.get('http://httpbin.org/cookies') print(reqThree.text) # prints information about "visit-month" cookie Như bạn có thể thấy, cookie session Phần tóm tắtCác khái niệm được thảo luận trong hướng dẫn này sẽ giúp bạn tạo các yêu cầu đến máy chủ cơ bản bằng cách truyền header, cookie hoặc chuỗi truy vấn cụ thể. Điều này sẽ rất tiện dụng khi bạn đang cố gắng thu thập thông tin từ một số trang web. Giờ đây, bạn sẽ có thể tự động tải các bài nhạc và hình nền từ các trang web khác nhau sau khi bạn đã tìm ra URL mẫu. Đừng ngần ngại xem thử những gì chúng tôi đang bán và những tài liệu dành cho học tập trên Market, và đừng ngần ngại đặt câu hỏi và cung cấp các phản hồi có giá trị của bạn. Nếu bạn có bất kỳ câu hỏi nào liên quan đến hướng dẫn này, xin vui lòng cho tôi biết trong phần bình luận nhé. |