Lưu xml vào tệp python

Có thật không? . ”, tôi nghe tất cả các bạn nói. Vâng, nó không phải là đơn giản. Ít nhất, nó không đơn giản như vậy đối với một người mới bắt đầu như tôi. Đây là lý do tại sao

Phân tích cú pháp khác với tiết kiệm

Chắc chắn, các chuyên gia cũng như người mới bắt đầu sẽ sử dụng các yêu cầu để kéo xuống nội dung của một trang web. Nói chung, nó nhằm mục đích phân tích cú pháp hoặc cạo trang đó cho các phần tử dữ liệu cụ thể

Điều gì sẽ xảy ra nếu bạn thực sự muốn lưu trang web đó vào ổ đĩa cục bộ của mình? . Bạn không còn chỉ đọc phiên bản kết xuất văn bản của trang, bạn đang cố lưu trang thực tế ở trạng thái ban đầu

Đây là những gì tôi thấy hơi khó hiểu. Tôi không phải xử lý tình huống text = r.text nữa, tôi cũng đang cố gắng duy trì định dạng ban đầu của trang, các tab và tất cả

Tại sao lại là XML?

Tôi đang nói về XML ở đây vì tôi đã/đang cố tải xuống tệp XML thực cho nguồn cấp RSS mà tôi muốn phân tích cú pháp ngoại tuyến. Đối với những bạn chơi ở nhà, đây là dành cho Thử thách mã PyBites 17 của chúng tôi [gợi ý gợi ý. ]

Tại sao phải Tải xuống khi bạn chỉ có thể Phân tích cú pháp nguồn cấp dữ liệu?

Câu hỏi hay. Đó là về cách thực hành tốt nhất và chỉ cần tốt đẹp

Trong trường hợp thử thách mã của chúng tôi [PCC17], bạn sẽ chạy tập lệnh Py bao nhiêu lần trong khi xây dựng ứng dụng để kiểm tra xem nó có hoạt động không?

Điều này tạo ra lưu lượng truy cập không cần thiết và tải trên máy chủ đó, đây là một việc khá tồi tệ

Điều thú vị hơn và Pythonic cần làm là có một tập lệnh riêng thực hiện yêu cầu một lần và lưu dữ liệu cần thiết vào một tệp cục bộ. Tập lệnh phân tích hoặc quét chính của bạn sau đó tham chiếu tệp cục bộ

Nhận được mã rồi

Được rồi, kiểm tra xem

import requests

URL = "//insert.your/feed/here.xml"

response = requests.get[URL]
with open['feed.xml', 'wb'] as file:
    file.write[response.content]

Tất cả trông khá quen thuộc nên tôi sẽ không đi vào chi tiết về các nghi phạm thông thường

Những gì tôi đang làm trong mã này là như sau

  • Kéo nội dung xml xuống bằng cách sử dụng
    Traceback [most recent call last]:
      File "pull_xml.py", line 12, in 
        file.write[response.content]
    TypeError: write[] argument must be str, not bytes
    
    0
  • Sử dụng câu lệnh
    Traceback [most recent call last]:
      File "pull_xml.py", line 12, in 
        file.write[response.content]
    TypeError: write[] argument must be str, not bytes
    
    2 để tạo tệp có tên
    Traceback [most recent call last]:
      File "pull_xml.py", line 12, in 
        file.write[response.content]
    TypeError: write[] argument must be str, not bytes
    
    3. [Nếu tệp tồn tại, nó sẽ bị ghi đè]
  • Viết nội dung của phản hồi yêu cầu vào tệp
    Traceback [most recent call last]:
      File "pull_xml.py", line 12, in 
        file.write[response.content]
    TypeError: write[] argument must be str, not bytes
    
    3

Đây là lý do tại sao nó là một bài tập học tập cho tôi

Khi tôi mở/tạo nguồn cấp dữ liệu. xml, tôi đang sử dụng “Chế độ”

Traceback [most recent call last]:
  File "pull_xml.py", line 12, in 
    file.write[response.content]
TypeError: write[] argument must be str, not bytes
5. Điều này có nghĩa là tôi đang mở tệp cho mục đích viết nhưng chỉ có thể ghi vào tệp ở định dạng nhị phân

Nếu bạn không chọn được chế độ nhị phân thì bạn sẽ gặp lỗi

Traceback [most recent call last]:
  File "pull_xml.py", line 12, in 
    file.write[response.content]
TypeError: write[] argument must be str, not bytes

Điều này khiến tôi bối rối và khiến tôi lãng phí thời gian khi cố gắng chuyển đổi dữ liệu phản hồi yêu cầu sang các định dạng khác nhau hoặc ghi vào tệp bên ngoài từng dòng một [dù sao thì tôi cũng bị mất định dạng. ]

Cần có chế độ nhị phân để ghi nội dung thực tế của trang XML vào tệp bên ngoài của bạn ở định dạng gốc

Nói về nội dung. Lưu ý trong câu lệnh

Traceback [most recent call last]:
  File "pull_xml.py", line 12, in 
    file.write[response.content]
TypeError: write[] argument must be str, not bytes
6 cuối cùng tôi đang sử dụng
Traceback [most recent call last]:
  File "pull_xml.py", line 12, in 
    file.write[response.content]
TypeError: write[] argument must be str, not bytes
0?

Sử dụng tùy chọn

Traceback [most recent call last]:
  File "pull_xml.py", line 12, in 
    file.write[response.content]
TypeError: write[] argument must be str, not bytes
2 cho phép bạn kết xuất toàn bộ tệp XML [nguyên trạng] vào tệp XML cục bộ của riêng bạn. Rực rỡ

Lưu ý cho người mới bắt đầu. Nếu bạn đang đọc mã của người khác, hãy chuẩn bị để xem các câu lệnh

Traceback [most recent call last]:
  File "pull_xml.py", line 12, in 
    file.write[response.content]
TypeError: write[] argument must be str, not bytes
2 nơi các tệp được mở
Traceback [most recent call last]:
  File "pull_xml.py", line 12, in 
    file.write[response.content]
TypeError: write[] argument must be str, not bytes
4. Điều tương tự cũng áp dụng cho mô-đun
Traceback [most recent call last]:
  File "pull_xml.py", line 12, in 
    file.write[response.content]
TypeError: write[] argument must be str, not bytes
5. Dòng thường sẽ đọc
Traceback [most recent call last]:
  File "pull_xml.py", line 12, in 
    file.write[response.content]
TypeError: write[] argument must be str, not bytes
6. Tôi đã sử dụng tên dạng đầy đủ vì mục đích của bài viết này, do đó, tệp từ và phản hồi trong mã của tôi

Sự kết luận

Đây là một trong những điều mà tất cả chúng ta chỉ quen làm. Kéo một nguồn cấp dữ liệu xuống và lưu nó vào một tệp là điều mà Bob đã làm hàng nghìn lần nên không còn phải suy nghĩ thêm nữa

Tuy nhiên, đối với tôi, việc này đã mất cả đêm * để chơi xung quanh vì tôi chưa bao giờ làm điều đó trước đây và đang cho rằng [ngớ ngẩn tôi. ] rằng mã phân tích mà tôi đang sử dụng cho

Traceback [most recent call last]:
  File "pull_xml.py", line 12, in 
    file.write[response.content]
TypeError: write[] argument must be str, not bytes
5 là tất cả những gì tôi cần

Tôi cũng nhận thấy rằng tôi đã phải tìm kiếm rất nhiều bài đăng trên StackOverflow và các tài liệu khác chỉ để hiểu khái niệm này một cách chính xác

Chủ Đề