Lấy dữ liệu từ url yêu cầu python

Điều mà tôi được yêu cầu làm đi làm lại là tự động lấy dữ liệu từ API. Mặc dù giữ chức danh “Nhà khoa học dữ liệu”, nhưng tôi thuộc một nhóm nhỏ, vì vậy tôi không chỉ chịu trách nhiệm xây dựng mô hình mà còn lấy dữ liệu, làm sạch dữ liệu cũng như đẩy và kéo dữ liệu đến bất cứ nơi nào cần đến. Nhiều người trong số các bạn có lẽ đang ở trong cùng một chiếc thuyền

Khi tôi lần đầu tiên bắt đầu hành trình tìm hiểu cách tạo các yêu cầu HTTP, lấy lại một chuỗi JSON, phân tích cú pháp và sau đó đẩy nó vào cơ sở dữ liệu, tôi đã gặp rất nhiều khó khăn để tìm các bài viết rõ ràng, ngắn gọn giải thích cách thực hiện nhiệm vụ rất quan trọng này. Nếu bạn đã từng sử dụng lỗ đen của Google để giải quyết một vấn đề kỹ thuật, có lẽ bạn đã phát hiện ra rằng những người rất kỹ thuật thích sử dụng ngôn ngữ kỹ thuật để giải thích cách thực hiện nhiệm vụ nhất định. Vấn đề với điều đó là, nếu bạn tự học, như tôi, bạn không chỉ phải học cách thực hiện nhiệm vụ mà bạn được yêu cầu mà còn phải học một ngôn ngữ kỹ thuật mới. Điều này có thể cực kỳ khó chịu

Nếu bạn muốn tránh học các thuật ngữ kỹ thuật và chỉ cần đi thẳng vào vấn đề, bạn đã đến đúng nơi. Trong bài viết này, tôi sẽ chỉ cho bạn cách lấy dữ liệu từ API và sau đó tự động hóa tác vụ để kéo lại sau mỗi 24 giờ. Đối với ví dụ này, tôi sẽ sử dụng Microsoft Graph API và trình bày cách kéo văn bản từ email. Tôi sẽ hạn chế sử dụng các gói API được chuẩn bị trước và dựa vào các yêu cầu HTTP bằng gói Yêu cầu Python — bằng cách này, bạn có thể áp dụng những gì học được ở đây cho gần như bất kỳ API RESTful nào khác mà bạn cần làm việc trên đó

Nếu bạn gặp sự cố với các yêu cầu API trong hướng dẫn này, đây là một mẹo. Sử dụng người đưa thư. Postman là một ứng dụng tuyệt vời cho phép bạn thiết lập và thực hiện lệnh gọi API thông qua một giao diện rõ ràng. Cái hay của nó là khi lệnh gọi API hoạt động, bạn có thể xuất mã bằng Python rồi dán ngay vào tập lệnh của mình. Ngạc nhiên

*Ghi chú. Hướng dẫn này nhằm mục đích trở thành một phương pháp đơn giản và dễ hiểu để truy cập API, chỉ vậy thôi. Nó có thể sẽ không mạnh mẽ đối với tình huống hoặc nhu cầu dữ liệu chính xác của bạn, nhưng hy vọng sẽ giúp bạn đi đúng hướng. Tôi đã tìm thấy phương pháp dưới đây là phương pháp đơn giản nhất để nhanh chóng lấy dữ liệu. Nếu bạn có đề xuất để làm cho mọi thứ trở nên dễ dàng hơn, hãy tắt âm thanh trong phần bình luận

Tài liệu API

Không có cách nào xung quanh việc điều hướng tài liệu API. Để làm việc với Outlook, bạn vào đây. Nếu bạn làm theo hướng dẫn này thành công và muốn làm nhiều hơn với API, hãy sử dụng liên kết đó để tham khảo

ủy quyền

Hầu hết các API, bao gồm cả Microsoft Graph, đều yêu cầu ủy quyền trước khi cung cấp cho bạn mã thông báo truy cập cho phép bạn gọi API. Đây thường là phần khó khăn nhất đối với người mới lấy dữ liệu từ API (đối với tôi)

Đăng ký ứng dụng của bạn

Làm theo hướng dẫn tại đây để đăng ký ứng dụng của bạn (những hướng dẫn này khá đơn giản và sử dụng GUI Azure) Bạn sẽ cần có tài khoản Microsoft của trường học, cơ quan hoặc cá nhân để đăng ký. Nếu sử dụng email công việc, bạn sẽ cần quyền truy cập của quản trị viên vào phiên bản Azure của mình. Nếu bạn đang làm việc này vì công việc, hãy liên hệ với bộ phận CNTT của bạn và họ có thể sẽ đăng ký ứng dụng cho bạn. Chọn 'web' làm loại ứng dụng của bạn và sử dụng URL đáng tin cậy cho URI chuyển hướng của bạn (URL mà chỉ bạn mới có quyền truy cập vào dữ liệu web cơ bản. Tôi đã sử dụng franklinsports. com vì chỉ nhóm của tôi mới có thể truy cập dữ liệu web cho trang web đó. Nếu bạn đang xây dựng một ứng dụng, bạn sẽ chuyển hướng đến ứng dụng của mình đến một nơi mà ứng dụng của bạn có thể nhận mã và ủy quyền cho người dùng)

Kích hoạt quyền Microsoft Graph

Sau khi ứng dụng của bạn được đăng ký, hãy truy cập cổng Đăng ký ứng dụng

Nhấp vào nơi nó hiển thị tên ứng dụng của bạn

Trên trang tiếp theo, nhấp vào 'Xem quyền API'

Cuối cùng, chọn Microsoft Graph rồi chọn tất cả các hộp bên dưới Tin nhắn để biết 'Quyền được ủy quyền. ’ (Lưu ý đối với ví dụ này, tôi sẽ chỉ lấy email từ một người dùng đã đăng nhập, để lấy dữ liệu email cho một tổ chức, bạn sẽ cần có quyền của ứng dụng — hãy làm theo quy trình tại đây)

Được rồi — bạn đã sẵn sàng bắt đầu thực hiện lệnh gọi API

Ủy quyền Bước 1. Nhận mã truy cập

Bạn sẽ cần một mã truy cập để nhận mã thông báo truy cập cho phép bạn thực hiện lệnh gọi đến API Đồ thị MS. Để thực hiện việc này, hãy nhập URL sau vào trình duyệt của bạn, hoán đổi thông tin xác thực phù hợp với thông tin hiển thị trên trang ứng dụng của bạn

Đi vào URL

Lấy URL xuất ra từ đoạn mã và dán vào trình duyệt của bạn. Nhấn enter và bạn sẽ được yêu cầu cấp quyền truy cập được ủy quyền cho tài khoản Microsoft của mình. Sử dụng tài khoản Microsoft mà bạn đã sử dụng để đăng ký ứng dụng của mình

Nếu ủy quyền không hoạt động, có điều gì đó không ổn với URL chuyển hướng bạn đã chọn hoặc với đăng ký ứng dụng. Tôi đã gặp sự cố với phần này trước đây — vì vậy đừng lo lắng nếu nó không hoạt động trong lần thử đầu tiên của bạn. Nếu ủy quyền thành công, bạn sẽ được chuyển hướng đến URL mà bạn đã sử dụng trong quá trình đăng ký Ứng dụng. Nối vào URL sẽ là các tham số chứa mã mà bạn sẽ sử dụng trong bước tiếp theo của chúng tôi — nó sẽ giống như thế này

Lấy mã đầy đủ và lưu nó vào tập lệnh python của bạn

Ủy quyền Bước 2. Sử dụng mã truy cập của bạn để nhận mã thông báo làm mới

Trước khi tiếp tục, hãy đảm bảo bạn đã cài đặt phiên bản mới nhất của gói Yêu cầu Python. Cách đơn giản nhất để làm điều đó là sử dụng pip

Trong bước này, bạn sẽ lấy mã được tạo ở bước 1 và gửi yêu cầu POST tới điểm cuối ủy quyền OAuth của MS Graph để nhận mã thông báo làm mới. (*Ghi chú. Vì mục đích bảo mật, tôi khuyên bạn nên lưu trữ client_secret của mình trên một tập lệnh khác với tập lệnh bạn sử dụng để gọi API. Bạn có thể lưu trữ bí mật trong một biến và sau đó nhập nó (hoặc bằng cách sử dụng dưa chua mà bạn sẽ thấy bên dưới)

Hoán đổi ####### trong đoạn mã bằng thông tin ứng dụng của riêng bạn và mã bạn nhận được ở bước 1 rồi chạy đoạn mã đó. (*Ghi chú. URI chuyển hướng phải được mã hóa url, nghĩa là nó sẽ trông như thế này. “https%3A%2F%2Franklinsports. com”)

Bạn sẽ nhận được phản hồi JSON giống như thế này

{'truy cập thẻ'. ’######################’,’refresh_token’. ’###################’}

Ủy quyền Bước 3. Sử dụng mã thông báo làm mới của bạn để nhận mã thông báo truy cập

Tại thời điểm này, bạn đã có mã thông báo truy cập và có thể bắt đầu gọi API, tuy nhiên, mã thông báo truy cập đó sẽ hết hạn sau một khoảng thời gian nhất định. Do đó, chúng tôi muốn thiết lập tập lệnh của mình để nhận mã thông báo truy cập mới mỗi khi chúng tôi chạy tập lệnh đó để quá trình tự động hóa của chúng tôi không bị hỏng. Tôi muốn lưu trữ refresh_token mới từ bước 2 trong một đối tượng pickle, sau đó tải nó vào để lấy access_token mới khi chạy tập lệnh

filename = ####path to the name of your pickle file#######
print(filename)
filehandler = open(filename, ‘rb’)
refresh_token = pickle.load(filehandler)
url = “//login.microsoftonline.com/common/oauth2/v2.0/token" payload = “””client_id%0A=##########& redirect_uri=##################& client_secret=##################& code={}& refresh_token={}& grant_type=refresh_token”””.format(code,refresh_token)
headers = { ‘Content-Type’: “application/x-www-form-urlencoded”, ‘cache-control’: “no-cache” }
response = requests.request(“POST”, url, data=payload, headers=headers)
r = response.json()
access_token = r.get(‘access_token’)
refresh_token = r.get(‘refresh_token’)
with open(filename, ‘wb’) as f:
pickle.dump(refresh_token, f)

Gọi API và Làm sạch và phân tích cú pháp JSON

Với access_token theo sau, bạn đã sẵn sàng gọi API và bắt đầu lấy dữ liệu. Đoạn mã dưới đây sẽ trình bày cách truy xuất 5 email cuối cùng với các tham số chủ đề cụ thể. Đặt access_token (được in đậm bên dưới) vào tiêu đề và chuyển nó vào yêu cầu nhận tới điểm cuối thư email

import json
import requests
url = ‘//graph.microsoft.com/v1.0/me/messages
$search="subject:###SUBJECT YOU WANT TO SEARCH FOR###”’
headers = {
‘Authorization’: ‘Bearer ‘ +access_token,
‘Content-Type’: ‘application/json; charset=utf-8’
}
r = requests.get(url, headers=headers)files = r.json()print(files)

Đoạn mã trên sẽ trả về một đầu ra json có chứa dữ liệu của bạn

Nếu bạn muốn có nhiều hơn 5 email, bạn sẽ cần phân trang qua các kết quả. Hầu hết các API đều có các phương pháp riêng để phân trang kết quả tốt nhất (bằng tiếng Anh, hầu hết các API sẽ không cung cấp cho bạn tất cả dữ liệu bạn muốn chỉ với một lệnh gọi API, vì vậy chúng cung cấp cho bạn các cách để thực hiện nhiều lệnh gọi cho phép bạn di chuyển qua các kết quả . MS Graph hay ở chỗ nó cung cấp điểm cuối chính xác mà bạn cần truy cập để có được trang kết quả tiếp theo, giúp việc phân trang trở nên dễ dàng. Trong đoạn mã dưới đây, tôi trình bày cách sử dụng vòng lặp while để thực hiện các lệnh gọi liên tiếp tới api và thêm chủ đề cũng như nội dung của từng thông báo email vào danh sách các danh sách

emails = []
while True:
try:
url = files[‘@odata.nextLink’]
for item in range (0,len(files[‘value’])):
emails.append(files['value'][item]['Subject'],[files[‘value’] [item][‘bodyPreview’])
r = requests.get(url, headers=headers)
print(r.text)
files = r.json()
except:
break

Đặt dữ liệu ở đâu đó

Cuối cùng, tôi sẽ đưa ra một ví dụ về cách đưa dữ liệu JSON vào tệp văn bản CSV, tệp này sau đó có thể được phân tích bằng excel hoặc đẩy vào cơ sở dữ liệu. Đoạn mã này sẽ trình bày cách ghi từng hàng trong danh sách danh sách của chúng tôi vào tệp CSV

import csv write_file =‘###LOCATION WHERE YOU WANT TO PUT THE CSV FILE###’
with open(write_file,’w’, newline = ‘’) as f:
writer = csv.writer(f, lineterminator = ‘\n’)
writer.writerows(emails)

tự động hóa

Bây giờ kịch bản của chúng tôi đã được viết. Chúng tôi muốn tự động hóa nó để chúng tôi có thể nhận được tin nhắn mới trong các tham số của mình khi chúng đến hàng ngày

Tôi đã làm điều này theo hai cách, tuy nhiên, có nhiều cách để tự động hóa

  1. Sử dụng Crontab trên máy chủ Ubuntu

Điều này khá đơn giản. Nếu bạn đang dùng Ubuntu, hãy nhập vào bảng điều khiển của bạn 'crontab -e' và nó sẽ mở ra các cronjob của bạn trong một tệp văn bản. Đi đến một dòng mới và gõ vào

0 1 * * * /full path to python environment/python /full path to file/example.py

Giả sử cron được thiết lập chính xác, phần trên sẽ đặt tập lệnh tự động chạy ở 1 UTC mỗi ngày (hoặc bất kỳ múi giờ nào mà máy chủ của bạn đang bật). Bạn có thể thay đổi thời gian đó thành bất cứ thứ gì bạn cần bằng cách thay đổi số 1 trong mã. Nếu bạn muốn trở nên phức tạp với thời gian cron của mình, thì trang web này là một nguồn tài nguyên tuyệt vời

2. Sử dụng Trình lập lịch tác vụ Windows

Đây là một cách hay và dễ dàng để tự động hóa trong các cửa sổ sử dụng Ứng dụng Trình lập lịch tác vụ. Chỉ cần mở Trình lập lịch tác vụ và nhấp vào 'Tạo tác vụ' ở phía bên tay phải. Ứng dụng này khá đơn giản và cho phép bạn đặt lịch và chương trình bạn muốn chạy bằng GUI

Khi bạn gặp khó khăn trong 'Hành động', hãy chọn Python làm chương trình, sau đó trong tab Thêm đối số (thẻ có '(tùy chọn)' bên cạnh), đặt đường dẫn đến. tập tin py

Đó là nó

Trong hướng dẫn này, tôi đã chỉ cho bạn cách lấy dữ liệu email của bạn từ Microsoft Graph API. Các nguyên tắc được trình bày ở đây có thể được sử dụng để hoạt động với hầu hết mọi API RESTful hoặc để thực hiện các tác vụ phức tạp hơn nhiều với Microsoft Graph (Tôi đã sử dụng MS Graph API để đẩy các tệp vào và ra khỏi điểm chia sẻ công ty của chúng tôi, đẩy dữ liệu từ các thư mục điểm chia sẻ

Những câu hỏi hoặc những bình luận? . công nghệ. Hoặc, theo dõi tôi trên Linkedin tại https. //www. linkin. com/trong/cameronwarren/

Làm cách nào để lấy dữ liệu từ một url trong Python?

Đang tìm nạp URL .
nhập urllib. yêu cầu với urllib. lời yêu cầu. urlopen('http. //trăn. org/') làm phản hồi. html = phản hồi. .
nhập Shutil nhập tempfile nhập urllib. yêu cầu với urllib. lời yêu cầu. urlopen('http. //trăn. org/') làm phản hồi. với tệp tạm thời. .
nhập urllib. yêu cầu req = urllib. lời yêu cầu

Làm cách nào để lấy dữ liệu từ yêu cầu trong Python?

Vì vậy, để yêu cầu phản hồi từ máy chủ, chủ yếu có hai phương pháp. LẤY. để yêu cầu dữ liệu từ máy chủ. .
httplib
urllib
yêu cầu

Làm cách nào để lấy văn bản từ url trong Python?

Chúng ta có thể hoàn thành nhiệm vụ này bằng một trong các tùy chọn sau. .
Phương pháp 1. sử dụng urllib. lời yêu cầu. urlopen()
Phương pháp 2. sử dụng yêu cầu. lấy()
Phương pháp 3. Sử dụng urllib3. Trình quản lý hồ bơi ()
Phương pháp 4. sử dụng urllib. lời yêu cầu. urlopen(). đọc (n)
Phương pháp 5. sử dụng urllib. lời yêu cầu. urlopen(). đọc()

Làm cách nào để lấy dữ liệu JSON từ yêu cầu POST trong Python?

Hãy xem các bước ngay bây giờ. .
Chọn yêu cầu POST và nhập URL thao tác POST dịch vụ của bạn
Nhấp vào Tiêu đề. Trong cột khóa, nhập Loại nội dung và trong cột Giá trị, nhập ứng dụng/json
Nhấp vào phần cơ thể và nhấp vào nút radio thô. nhập dữ liệu JSON của bạn. Nhấp vào nút Gửi

Chủ đề