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
0Traceback [most recent call last]: File "pull_xml.py", line 12, in file.write[response.content] TypeError: write[] argument must be str, not bytes
- Sử dụng câu lệnh
2 để tạo tệp có tênTraceback [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 đè]Traceback [most recent call last]: File "pull_xml.py", line 12, in file.write[response.content] TypeError: write[] argument must be str, not bytes
- Viết nội dung của phản hồi yêu cầu vào tệp
3Traceback [most recent call last]: File "pull_xml.py", line 12, in file.write[response.content] TypeError: write[] argument must be str, not bytes
Đâ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ânNế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
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ô-đunTraceback [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ẽ đọcTraceback [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ôiTraceback [most recent call last]: File "pull_xml.py", line 12, in file.write[response.content] TypeError: write[] argument must be str, not bytes
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ầnTô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