Hướng dẫn download csv from website button python - tải xuống csv từ nút trang web python

Trước hết, bạn nên hiểu rằng giao thức HTTP dựa trên các yêu cầu. Kết quả cuối cùng của việc thực thi JavaScript sẽ được hình thành yêu cầu HTTP cho phép máy chủ phản hồi với nội dung tệp. Bạn cần "đảo ngược" trang web, tìm cách tạo yêu cầu thích hợp và lặp lại tương tự như nó có thể được thực hiện.requests. Final result of JavaScript execution will be formed HTTP request which let server respond with file content. You need to "reverse" web page, find how to create proper request and repeat it as similar as it can be done.

Vì vậy, chúng ta hãy cố gắng thực hiện từng bước này:

  1. Nhấp vào nút chuột bên phải trên phần tử thực thi tải xuống và nhấn "Kiểm tra phần tử"
  2. Trong mã nguồn, bạn có thể thấy tên của hàm javascript, phần tử này thực thi
  3. Nhập tên của chức năng trong bảng điều khiển không có dấu ngoặc đơn và nút nhấp vào gần Return Return [nút này sẽ mở chức năng JavaScript này trong mã nguồn]
  4. Trong mã nguồn, chúng ta thấy chức năng đó thực thi gửi trên phần tử HTML có ID frmDownload. Vì vậy, hãy quay lại tab "Thanh tra" và nhập ID này vào hộp tìm kiếm.
  5. Bây giờ chúng tôi thấy rằng yếu tố này là hình thức HTML. Mẫu này gửi yêu cầu POST đến URL //www.vcsprojectdatabase.org/services/publicViewServices/fetchProjectsExport với dữ liệu tiếp theo:

    searchTerm=
    country=
    sectoral_scope=0
    recentProjects=
    sort=projectId
    dir=DESC
    formatType=csv
    

    Thông tin này là đủ để thử lặp lại yêu cầu này trong Python.

Hãy viết tập lệnh nhỏ biểu mẫu và gửi cùng một yêu cầu và lưu kết quả vào tệp .csv:

import requests

data = {
    "searchTerm": "",
    "country": "",
    "sectoral_scope": "0",
    "recentProjects": "",
    "sort": "projectId",
    "dir": "DESC",
    "formatType": "csv"
}

file = requests.post["//www.vcsprojectdatabase.org/services/publicViewServices/fetchProjectsExport", data]

with open["res.csv", "wb+"] as f:
    f.write[file.content]

Ra mắt nó và nó ... hoạt động. res.csv chứa kết quả thích hợp.

NHƯNG ĐÓ KHÔNG PHẢI LÀ TẤT CẢ. Thông thường mọi thứ không dễ dàng như vậy. Để cho yêu cầu của chúng tôi trông giống như được gửi bởi trình duyệt, chúng tôi nên xem xét các tiêu đề yêu cầu. Để nắm bắt yêu cầu HTTP từ trình duyệt, chúng tôi có thể mở tab "Mạng": Usually everything is not so easy. To let our request look same as sent by browser we should take a look on request headers. To capture HTTP request from browser we can open "Network" tab:

Bây giờ hãy nhấn nút Tải xuống trên trang web và tải xuống tệp CSV. Trong bảng yêu cầu Bây giờ chúng ta có thể thấy yêu cầu bài đăng của chúng tôi. Nhấp vào nó và xem tab "Tiêu đề" vào phần "Tiêu đề yêu cầu".

Có tiêu đề cookie, chủ yếu là trong các yêu cầu không quan trọng và có thể bỏ qua. Nhưng nếu bạn có một số vấn đề với yêu cầu, bạn nên xem xét các yêu cầu trước đó, hãy tìm yêu cầu với tiêu đề Set-Cookie trong phản hồi của máy chủ và lặp lại.

Chúng ta hãy cải thiện tập lệnh và sao chép quan trọng [máy chủ, độ dài nội dung, kết nối mà chúng ta không bao gồm, vì mô-đun yêu cầu Python sẽ tự động thêm chúng; các tiêu đề không cần thiết-không cần thiết bảo mật] từ trình duyệt.

import requests

data = {
    "searchTerm": "",
    "country": "",
    "sectoral_scope": "0",
    "recentProjects": "",
    "sort": "projectId",
    "dir": "DESC",
    "formatType": "csv"
}

headers = {
    "User-Agent": "Mozilla/5.0 [Windows NT 10.0; Win64; x64; rv:66.0] Gecko/20100101 Firefox/66.0",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language":  "en-US,en;q=0.5",
    "Accept-Encoding": "gzip, deflate, br",
    "Referer": "//www.vcsprojectdatabase.org/",
    "Content-Type": "application/x-www-form-urlencoded"
}

file = requests.post["//www.vcsprojectdatabase.org/services/publicViewServices/fetchProjectsExport", data,
                     headers=headers]

with open["res.csv", "wb+"] as f:
    f.write[file.content]

P.S. Đừng quên hỏi chủ sở hữu trang web cho phép Don't forget to ask website owner for permission 😉

Trước hết, bạn nên hiểu rằng giao thức HTTP dựa trên các yêu cầu. Kết quả cuối cùng của việc thực thi JavaScript sẽ được hình thành yêu cầu HTTP cho phép máy chủ phản hồi với nội dung tệp. Bạn cần "đảo ngược" trang web, tìm cách tạo yêu cầu thích hợp và lặp lại tương tự như nó có thể được thực hiện.requests. Final result of JavaScript execution will be formed HTTP request which let server respond with file content. You need to "reverse" web page, find how to create proper request and repeat it as similar as it can be done.

Vì vậy, chúng ta hãy cố gắng thực hiện từng bước này:

  1. Nhấp vào nút chuột bên phải trên phần tử thực thi tải xuống và nhấn "Kiểm tra phần tử"
  2. Trong mã nguồn, bạn có thể thấy tên của hàm javascript, phần tử này thực thi
  3. Nhập tên của chức năng trong bảng điều khiển không có dấu ngoặc đơn và nút nhấp vào gần Return Return [nút này sẽ mở chức năng JavaScript này trong mã nguồn]
  4. Trong mã nguồn, chúng ta thấy chức năng đó thực thi gửi trên phần tử HTML có ID frmDownload. Vì vậy, hãy quay lại tab "Thanh tra" và nhập ID này vào hộp tìm kiếm.
  5. Bây giờ chúng tôi thấy rằng yếu tố này là hình thức HTML. Mẫu này gửi yêu cầu POST đến URL //www.vcsprojectdatabase.org/services/publicViewServices/fetchProjectsExport với dữ liệu tiếp theo:

    searchTerm=
    country=
    sectoral_scope=0
    recentProjects=
    sort=projectId
    dir=DESC
    formatType=csv
    

    Thông tin này là đủ để thử lặp lại yêu cầu này trong Python.

Hãy viết tập lệnh nhỏ biểu mẫu và gửi cùng một yêu cầu và lưu kết quả vào tệp .csv:

import requests

data = {
    "searchTerm": "",
    "country": "",
    "sectoral_scope": "0",
    "recentProjects": "",
    "sort": "projectId",
    "dir": "DESC",
    "formatType": "csv"
}

file = requests.post["//www.vcsprojectdatabase.org/services/publicViewServices/fetchProjectsExport", data]

with open["res.csv", "wb+"] as f:
    f.write[file.content]

Ra mắt nó và nó ... hoạt động. res.csv chứa kết quả thích hợp.

NHƯNG ĐÓ KHÔNG PHẢI LÀ TẤT CẢ. Thông thường mọi thứ không dễ dàng như vậy. Để cho yêu cầu của chúng tôi trông giống như được gửi bởi trình duyệt, chúng tôi nên xem xét các tiêu đề yêu cầu. Để nắm bắt yêu cầu HTTP từ trình duyệt, chúng tôi có thể mở tab "Mạng": Usually everything is not so easy. To let our request look same as sent by browser we should take a look on request headers. To capture HTTP request from browser we can open "Network" tab:

Bây giờ hãy nhấn nút Tải xuống trên trang web và tải xuống tệp CSV. Trong bảng yêu cầu Bây giờ chúng ta có thể thấy yêu cầu bài đăng của chúng tôi. Nhấp vào nó và xem tab "Tiêu đề" vào phần "Tiêu đề yêu cầu".

Có tiêu đề cookie, chủ yếu là trong các yêu cầu không quan trọng và có thể bỏ qua. Nhưng nếu bạn có một số vấn đề với yêu cầu, bạn nên xem xét các yêu cầu trước đó, hãy tìm yêu cầu với tiêu đề Set-Cookie trong phản hồi của máy chủ và lặp lại.

Chúng ta hãy cải thiện tập lệnh và sao chép quan trọng [máy chủ, độ dài nội dung, kết nối mà chúng ta không bao gồm, vì mô-đun yêu cầu Python sẽ tự động thêm chúng; các tiêu đề không cần thiết-không cần thiết bảo mật] từ trình duyệt.

import requests

data = {
    "searchTerm": "",
    "country": "",
    "sectoral_scope": "0",
    "recentProjects": "",
    "sort": "projectId",
    "dir": "DESC",
    "formatType": "csv"
}

headers = {
    "User-Agent": "Mozilla/5.0 [Windows NT 10.0; Win64; x64; rv:66.0] Gecko/20100101 Firefox/66.0",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language":  "en-US,en;q=0.5",
    "Accept-Encoding": "gzip, deflate, br",
    "Referer": "//www.vcsprojectdatabase.org/",
    "Content-Type": "application/x-www-form-urlencoded"
}

file = requests.post["//www.vcsprojectdatabase.org/services/publicViewServices/fetchProjectsExport", data,
                     headers=headers]

with open["res.csv", "wb+"] as f:
    f.write[file.content]

P.S. Đừng quên hỏi chủ sở hữu trang web cho phép Don't forget to ask website owner for permission 😉

Bài Viết Liên Quan

Chủ Đề