Hướng dẫn python build query string - chuỗi truy vấn xây dựng python
Chuỗi truy vấn URL là gì?Một URL điển hình trông rất giống một đường dẫn tệp hệ thống, ví dụ: Show
Một chuỗi truy vấn là một quy ước để nối các cặp giá trị khóa vào URL. URL tiêu chuẩn cho trang web New York của New York Times là:query string is a convention for appending key-value pairs to a URL. The standard URL for the New York Times's website's New York section is this:
Tuy nhiên, nếu bạn nhấp vào tab New York qua trang chủ của NYTimes.com, bạn sẽ nhận thấy rằng cả một loạt các ký tự được thêm vào URL:
Dấu câu hỏi 4 biểu thị sự phân tách giữa URL tiêu chuẩn và chuỗi truy vấn. Tất cả mọi thứ sau đó là một cặp giá trị chính, với mỗi cặp được phân tách bằng một ampersand, 5. Dấu hiệu bằng 6 được sử dụng để tách khóa và giá trị.question mark 4 denotes the separation between the standard URL and the query string. Everything after that is a key value pair, with each pair separated by an ampersand, 5. The equals sign 6 is used to separate key and
value.Vì vậy, các cặp giá trị khóa trong chuỗi truy vấn trên là:
Hoặc, nhiều hơn cho mục đích của chúng tôi, đây là những gì các bàn phím đó sẽ trông như một từ điển:dictionary:
Những người thực sự làm gì? Đó thực sự là một câu hỏi mà chúng tôi không thể trả lời, trừ khi chúng tôi đang chạy các máy chủ NYTimes.com. Mặc dù có thể an toàn khi cho rằng NYT sử dụng chuỗi truy vấn trong các phân tích của nó, để có thể biết có bao nhiêu người đã truy cập 7 thông qua trang chủ và bằng cách nhấp vào một số nút.Các dịch vụ web khác có các chuỗi truy vấn phục vụ một mục đích rõ ràng hơn. Ví dụ, Duckduckgo, có điểm cuối URL này:DuckDuckGo, which has this URL endpoint:
Tuy nhiên, nếu chúng ta nối một giá trị cặp khóa là chuỗi truy vấn, với 8 là chìa khóa (hãy nghĩ về nó như là một chữ viết tắt cho "truy vấn") và giá trị là thuật ngữ chúng ta muốn tìm kiếm, ví dụ: 9, sau đó Duckduckgo sẽ trả về kết quả tìm kiếm cho 9:key (think of it as an abbreviation for "query") and the value being the term we want to search for, e.g. 9, then DuckDuckGo will return search results for 9:
Ký tự không hợp lệ cho URLThật khó để nói những ngày này vì các trình duyệt web hiện đại cho phép chúng tôi gõ bất cứ thứ gì từ bàn phím. Trừ khi chúng tôi dành đầu vào với 1, văn bản chỉ được gửi như là Google hoặc Duckduckgo hoặc bất kỳ công cụ tìm kiếm mặc định nào của bạn.Tuy nhiên, đây chỉ là một ảo ảnh thuận tiện. Khi chúng tôi nhập vào thanh trình duyệt của bạn, nói, một cái gì đó có ký tự khoảng trắng, ví dụ:
Trước khi gửi nó đến công cụ tìm kiếm, trình duyệt web sẽ thực sự tuần tự hóa nó như:
Điều này là do các ký tự khoảng trắng không được phép trong các URL, vì vậy mã thông báo 2 được sử dụng để đại diện cho nó. Về cơ bản, hầu hết mọi thứ không phải là một nhân vật chữ và số cần phải có mã hóa đặc biệt này.not allowed in URLs, so the token 2 is used to represent it. Basically, almost everything that is not an alphanumeric character needs to have this special encoding.Vào thời xa xưa, bạn phải nhớ cách thực hiện các mã hóa này nếu không thì trình duyệt sẽ khiến bạn gặp lỗi. Bây giờ, trình duyệt chỉ sửa nó cho bạn, không giống như trình kiểm tra chính tả tự động. Cách Urllib của Python xử lý các ký tự URL không hợp lệTất nhiên, khi lập trình trong Python, mọi thứ vẫn hoạt động như thời xa xưa - tức là chúng ta buộc phải là _Explicit. Đây là những gì xảy ra khi bạn sử dụng phương pháp 3 đi qua mô-đun tích hợp của Python 4:
Một lỗi được nêu ra:
Chúng ta phải tự mình ném vào 2 để tránh lỗi: 0Sử dụng urllib.parse.quote để thoát khỏi các ký tự không hợp lệCố gắng nhớ những nhân vật nào không hợp lệ, không bao giờ thoát khỏi chúng bằng tay với các dấu hiệu phần trăm, là một nhiệm vụ điên rồ. Đó là lý do tại sao có một mô-đun Python tích hợp-Urllib.parse-có chứa một phương pháp thích hợp: 6.Hãy thử nó thông qua Python tương tác - Lưu ý rằng 7 không thực sự tự thực hiện bất kỳ URL nào - đó là một phương pháp làm một điều và một điều tốt: làm cho chuỗi an toàn cho URL: 1Kết hợp với phương pháp URLRETREE đã được thử trước đó: 2Tuần tự hóa từ điển thành chuỗi truy vấnTrong ví dụ trước, phải gõ rằng 8 cũng có vẻ tẻ nhạt đối với bạn. Một lần nữa, urllib.parse có một phương thức cho điều đó: urlencode.urlencode.Hãy thử nó trong Python tương tác: 3Lưu ý rằng phương pháp 9 bao gồm chức năng của hàm 6, do đó, có lẽ bạn hiếm khi cần phải tự gọi 6. Cũng lưu ý rằng 9 sử dụng dấu 3 để mã hóa ký tự không gian trong URL, về cơ bản cũng hợp lệ như sử dụng 2. Một lần nữa, các quy tắc và tiêu chuẩn khó hiểu là một lý do khác để ủy thác phân tích chuỗi này cho các thư viện Python thích hợp.Và, một lần nữa, 9 không thực sự tìm nạp URL. Chúng tôi vẫn phải sử dụng 3: 4Lưu ý rằng chúng tôi cũng phải bao gồm 4, luôn được sử dụng để đặt chuỗi truy vấn từ phần đầu tiên của URL.Cũng lưu ý rằng việc tìm kiếm các truy vấn tìm kiếm theo chương trình qua Duckduckgo (hoặc Google, vì vấn đề đó) không hiệu quả lắm. Tôi chỉ sử dụng nó làm ví dụ để bạn có thể thấy URL hóa ra là gì và kiểm tra nó trong trình duyệt của bạn. Yêu cầu giải cứuThế còn thư viện yêu cầu mà chúng tôi đã sử dụng để tìm nạp URL cho hầu hết các phần? Vâng, đúng với khẩu hiệu của nó là "HTTP cho con người", thư viện yêu cầu kết thúc một cách gọn gàng tất cả các chức năng 8 cho chúng tôi.Chỉ cần sử dụng phương thức 9 với đối số thứ hai (tên của đối số là 0): 5Thử bản đồ tĩnh GoogleHãy làm việc với API trực quan, thú vị hơn: API bản đồ tĩnh Google (Để biết thêm thông tin về API Google Static Map Đánh giá các tham số bản đồ tĩnhNhư với hầu hết các API, Google Static Maps bắt đầu với điểm cuối URL: 6Ở mức tối thiểu, nó yêu cầu tham số kích thước, với giá trị ở định dạng 1:size parameter, with a value in the format of 1: 7Đây là những gì bản đồ trông giống như: Hãy thêm một tham số khác: Zoomzoom 8Và hãy thay đổi nơi bản đồ được tập trung xung quanh với tham số trung tâm, lấy bất kỳ chuỗi nào mô tả vị trí có thể đọc được của con người:center parameter, which takes any string that describes a human-readable location: 9Hoặc, chúng ta có thể vượt qua trong một cặp vĩ độ/kinh độ: 0Thêm điểm đánh dấuCó lẽ bạn đang nghĩ: Điều này thật dễ dàng, mã hóa các tham số URL. Hãy làm điều gì đó khó khăn. Tham số đánh dấu cho phép chúng tôi thêm các điểm đánh dấu vào bản đồ. Nó lấy một chuỗi vị trí (giống như trung tâm):markers parameter lets us add markers to the map. It takes a location string (just like center): 1Tuy nhiên, API cho phép đánh dấu nhiều điểm (do đó, tên số nhiều tham số của "điểm đánh dấu"). Tiêu chuẩn cho các chuỗi truy vấn URL Khi nhiều giá trị có cùng một khóa là lặp lại khóa, nói cách khác, hiển thị 2 cho cả 3 và 4, chúng tôi bao gồm điều này trong chuỗi truy vấn: 2e.g. 3Tùy chỉnh phong cách của các điểm đánh dấu
Theo mặc định, các điểm đánh dấu bản đồ có màu đỏ. Để tạo màu xanh lá cây đánh dấu, đây là những gì giá trị 2 được đặt thành:red. To make a marker
green, this is what the 2 value is set to: 4e.g. 5
Chúng ta cũng có thể thay đổi kích thước của biểu tượng. Và cho nó một lá thư. Đây là giá trị cho một biểu tượng màu xanh cho Chicago, với một nhãn bao gồm chữ "X": 6
Chúng ta cũng có thể thay đổi kích thước của biểu tượng. Và cho nó một lá thư. Đây là giá trị cho một biểu tượng màu xanh cho Chicago, với một nhãn bao gồm chữ "X": 7 6 8!] 9Nhãn: x
Về mặt kỹ thuật, trong khi các ví dụ URL ở trên sẽ hoạt động trong một trình duyệt hiện đại, các ký tự ống không được phép vào URL. Họ nên được trốn thoát với 6: 0Nếu điều đó không bị phức tạp/đủ xấu cho bạn, API Google Maps cho phép bạn sử dụng các biểu tượng tùy chỉnh. Đây là cách tạo điểm đánh dấu bằng khuôn mặt của Tổng thống Obama (được tìm thấy ở URL sau: Giá trị from urllib.request import urlretrieve thing = urlretrieve("https://www.duckduckgo.com/?q=Stanford University") 2 tương ứng:Tuy nhiên, như bạn có thể tưởng tượng, một số ký tự trong URL không được phép như trong chuỗi truy vấn. Nghĩ về nó; Chúng ta đang đặt một URL bên trong một URL khác, làm thế nào một trình duyệt nguyên thủy dễ dàng phân tích lại điều đó? Ví dụ URL ở trên khá đơn giản, nhưng vì các URL có thể chứa bất kỳ số lượng ký tự lạ nào, chúng ta nên cho rằng nhiều nhân vật đó sẽ phải được mã hóa theo phần trăm thời trang đó. Từ lời giải thích của Google API: Đầu tiên, chúng ta hãy nhập 9 và thiết lập các hằng số, tức là các biến không thay đổi: 1Nhập 1 là tùy chọn. Nhưng nó cho phép bạn kiểm tra thuận tiện các URL từ mã Python của bạn: 2(Bạn nên làm điều này trong Python tương tác) Ở đây chúng tôi đi. URL API bản đồ tĩnh cơ bản của GoogleChỉ cần chỉ định tham số 2: 3Thêm zoomĐây chỉ đơn giản là một cặp giá trị khóa khác trong từ điển: 4Thêm trung tâmMột lần nữa, chỉ là một cặp giá trị khóa khác 5Thêm điểm đánh dấu 2 chỉ là một cặp giá trị khóa khác, khi chúng tôi chỉ thêm một điểm đánh dấu:. 6Sử dụng tham số liều của UrlenCode để chỉ định danh sách các giá trịOK, thêm nhiều điểm đánh dấu là nơi mọi thứ trở nên hơi phức tạp. Chúng tôi có thể đại diện cho một danh sách các chuỗi vị trí bằng cách sử dụng, một danh sách các chuỗi:list of strings: 7Tuy nhiên, chúng ta phải gọi 9 với đối số 6 được đặt thành 7 (thử bỏ qua đối số để xem kết quả của riêng bạn): 8Chỉ để giải trí, tuần tự hóa một loạt các vị trí vào URL bản đồ tĩnh của Google: 9Hình ảnh và URL kết quả:
Ánh xạ động đấtĐó không phải là nhiều niềm vui khi tạo ra danh sách bằng tay. Vì vậy, chúng ta hãy sử dụng một danh sách từ một nguồn chính thức của chính phủ: Chương trình nguy cơ động đất USGS. Ví dụ dưới đây là một minh chứng của mô -đun 8 và hàm 9, có thể được sử dụng để tạo danh sách các từ điển từ tệp CSV. 0Đây là URL kết quả (tính đến ngày 9 tháng 2 năm 2016):
Dưới đây là phiên bản được làm sạch hơn một chút của mã sử dụng thư viện yêu cầu để "chuẩn bị" URL: 1Hãy tạo một chức năng để ánh xạ các điểm đánh dấuTrước khi chúng ta tham gia vào công việc khó khăn trong việc tạo kiểu cho các điểm đánh dấu, hãy kết thúc chức năng mà chúng ta đã sử dụng để tạo URL bản đồ tĩnh Google Static thích hợp thành một chức năng: (Giả sử bạn đã đọc hướng dẫn ngắn về các chức năng: Các nguyên tắc cơ bản trong Python) Đây là triển khai xương trần, trong đó người dùng chỉ phải chỉ định danh sách (hoặc chỉ là một chuỗi, nếu chỉ có một vị trí) vị trí và, tùy chọn, chiều rộng và chiều cao. Hàm 00 thực hiện công việc tuần tự hóa đầu vào thành định dạng API bản đồ tĩnh của Google.list (or just a string, if there's only one location) of locations and, optionally, width and height. The 00 function does the work of serializing the input into proper Google Static Maps API format.Cuối cùng, nó trả về URL dưới dạng đối tượng chuỗi: 2Đây là cách bạn sẽ sử dụng nó, tương tác: 3Kiểm tra các URL đó bằng cách dán chúng vào trình duyệt web rất tốn thời gian. Vì vậy, hãy tạo một chức năng khác. Cái này không trả lại bất cứ điều gì. Thay vào đó, nó có các tham số tương tự như 01, nhưng chuyển chúng trực tiếp vào 01, sau đó chuyển kết quả của điều đó vào 03, thực hiện hành động mở Webbrowser:(Lưu ý rằng định nghĩa này giả định rằng 01 đã được xác định trước đó) 4Điểm đánh dấu kiểu dáng. Đây là nơi nó trở nên khó khăn. Một cách nhắc nhở, 2 lấy một chuỗi phân loại đường ống để tách cấu hình kiểu, ví dụ: 5Tuy nhiên, đó là một quy ước về việc tạo ra của Google, bởi vì họ cần một cách để thực hiện các cặp giá trị khóa (ví dụ: 06 = 07) độc lập (hay đúng hơn là lồng nhau) theo cách mà các cặp có giá trị khóa được thực hiện trong chuỗi truy vấn URL .Về cơ bản, chúng ta phải tự tạo ra chuỗi: 6Kết quả của mã trên sẽ dẫn đến biến 08 trỏ đến một chuỗi như thế này: 7Mà sau đó chúng ta có thể chuyển vào đối số 09 của hàm 01 được xác định trước đó của chúng tôi: 8Tạo ra một URL như thế này: 9Xác định phong cách đánh dấu chắc chắn đã phức tạp, nó phức tạp đến mức nó có thể xứng đáng với phương pháp riêng của nó. Tạo hàm created_styled_marker ()Tôi sẽ bỏ qua lời giải thích đầy đủ, hoặc thậm chí bận tâm tạo ra những gì tôi coi là triển khai trong thế giới thực tốt nhất của hàm 11. Chúng ta có thể bao gồm nó trong một bài học khác, nhưng điểm chính là: Hãy xem cách chúng ta có thể sử dụng các chức năng và cấu trúc dữ liệu Python, như danh sách và từ điển, để tạo chuỗi văn bản hữu ích để liên lạc với các dịch vụ khác.lists and dictionaries, to create text strings useful
for communicating with other services.Không cần xây dựng thêm, đây là cách biến mã ánh xạ biểu tượng trước đó thành một hàm có thể tái sử dụng: 0Lưu ý: Nếu danh sách và từ điển là chiếc mũ cũ cho bạn và bạn hiểu danh sách toàn diện, cũng như định dạng chuỗi, đây là một chiếc quần pythony-phiên bản ưa thích: 1Dưới đây là tất cả các mã có liên quan để tạo ra một trình bao bọc tiện lợi Quickie-Let-a-Google-static-maps-API, như một kịch bản lớn: Lưu ý rằng tôi đã sửa đổi đáng kể 01 từ cuộc biểu tình trước đó.Xem liệu bạn có thể gỡ rối lý do không, nhưng nó không đáng để giải thích đầy đủ vì đây không phải là một bài học về thiết kế ứng dụng 2Và khi các chức năng được xác định và tải vào trình thông dịch, đây là cách chúng tôi gọi các chức năng: 3 |