Làm thế nào để bạn cạo dữ liệu từ một mạng trong python?
Tôi đã cố gắng giúp ai đó thực hiện nhiệm vụ quét web vào ngày hôm qua và tình cờ phát hiện ra một cách thú vị để sử dụng API để thu thập dữ liệu từ một số trang web nhất định Show Ngày nay, nhiều trang web sử dụng khung giao diện người dùng hiển thị nội dung động bằng cách tải tệp JSON hoặc XML từ phần phụ trợ của họ. Tôi sẽ chỉ cho bạn cách tìm URL để truy cập nội dung động đó để bạn có thể dễ dàng thu thập dữ liệu từ một trang web mà không cần BeautifulSoup, bộ chọn CSS hoặc XPath. JSON rõ ràng, đơn giản Tại sao cạo lưu lượng mạng?Bạn đang ở trên một nền tảng truyền thông xã hội và bạn tạo một bài đăng. Hãy nói một tweet. Sau đó, bạn của bạn nhận xét về nó. Thay vì yêu cầu tải lại toàn bộ trang để hiển thị bình luận gần đây của bạn bè, trình duyệt của bạn chỉ yêu cầu dữ liệu liên quan đến bài đăng của bạn Điều này làm giảm lượng dữ liệu phải được yêu cầu và người dùng cuối không phải tải lại toàn bộ trang. Điều này rất thú vị để thu thập dữ liệu vì dữ liệu bạn đang theo dõi đôi khi chỉ có thể được truy cập thông qua một trong các yêu cầu này chúng ta đi đây. Bạn mở URL trang web mà bạn muốn cạo Bạn truy cập HTML. Nhưng không có gì. Không có dữ liệu nào được hiển thị công khai Trước khi vào XHR, trước tiên hãy nói về một vấn đề phổ biến mà nhiều người mắc phải khi cạo một trang. Kiểm tra xem bạn có bị mắc kẹt ở đó trước đó không để có được một cấp độ sâu hơn Dữ liệu trong tập lệnh không giống như trong HTMLTrong một số trường hợp, bạn có thể nhận ra rằng dữ liệu được trả về cho bạn khác với dữ liệu bạn nhìn thấy trong dạng xem. tùy chọn nguồn của trình duyệt của bạn. Hãy nhớ rằng Kiểm tra phần tử và Nguồn xem không giống nhau
Lấy một ví dụ đơn giản, nói Twitter. Nếu bạn đi tới “Xem nguồn”, bạn sẽ thấy một tài liệu khá nhỏ tải hầu hết các tệp javascript cần thiết. Nhưng nếu bạn Kiểm tra các phần tử, bạn sẽ thấy nhiều mã HTML hơn vì nó đã được tìm nạp và hiển thị Chà, trong trường hợp này, có khả năng thứ bạn đang thiếu là Tiêu đề yêu cầu tác nhân người dùng. Tiêu đề Tác nhân người dùng chỉ định trình duyệt đang được sử dụng. Khi nó không có ở đó, trang web có thể cho rằng một yêu cầu tự động đang được thực hiện. Nhưng nó rất đơn giản để sửa chữa Chỉ cần thêm tác nhân người dùng của trình duyệt hiện đại vào yêu cầu của bạn 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36' Nhưng nó sẽ không phải lúc nào cũng dễ dàng. Hầu hết thời gian, sẽ không có dữ liệu nào được hiển thị bên trong cấu trúc trang. Hãy xem xét kỹ hơn Dữ liệu thậm chí không thoát ra bên trong HTMLChúng tôi sẽ sử dụng Công cụ Chrome để xác định yêu cầu nào chịu trách nhiệm cung cấp dữ liệu mà chúng tôi đang tìm kiếm Tôi sẽ lấy Airtable làm ví dụ khi bạn tôi đang làm việc với nó. Về cơ bản, ứng dụng này cho phép các nhóm tạo và chia sẻ nhiệm vụ Tôi đang tìm yêu cầu đưa các tweet mới lên trang bảng điều khiển. Dưới đây là các bước tôi đã làm theo để tìm đúng yêu cầu
Bây giờ bạn có thể thấy rằng có một số dữ liệu đi qua mạng. Nếu trang web tải dữ liệu động, trang web thường sử dụng XMLHttpRequests (XHR) Trình duyệt sử dụng API để lấy dữ liệu từ máy chủ. Và nó chính xác là những gì chúng tôi đang tìm kiếm. Ở đây, XHR là một yêu cầu GET chứa tất cả dữ liệu chúng tôi muốn loại bỏ Đôi khi bạn chỉ cần sao chép URL đó và dán nó vào nơi khác, dữ liệu sẽ tăng lên. Nhưng ở đây hệ thống phức tạp hơn một chút. có một URL duy nhất được tạo cho mọi yêu cầu để ngăn không cho nó bị loại bỏ. Chúng ta sẽ xem sau cách xử lý việc này Note: the headless browser renders everything from XHR requests and from content stored within Nhưng điều gì sẽ xảy ra nếu trang web sử dụng các yêu cầu POST chỉ hoạt động trong ngữ cảnh của trang được tải (được bảo mật bằng cookie, tiêu đề, mã thông báo. )? Phương pháp này có thể được sử dụng để nhận đánh giá ứng dụng từ Cửa hàng Google Play. Trong hình bên dưới, bạn có thể thấy một ví dụ điển hình về yêu cầu POST cùng với dữ liệu của nó, được gửi cho mỗi 40 bài đánh giá mà bạn muốn xem Để gửi yêu cầu POST, chúng ta có thể sử dụng jQuery. ajax() và gọi nó từ ngữ cảnh của trang được tải trong trình duyệt không đầu. Để nhận được hơn 40 đánh giá, bạn có thể lặp lại tham số XHR trong trường hợp này trả về dữ liệu HTML thay vì JSON, vì vậy chúng tôi phải phân tích chúng và sử dụng bộ chọn Bằng cách này, bạn có thể thu thập thông tin và trích xuất 4.000 bài đánh giá cho một ứng dụng nhất định trên Cửa hàng Google Play trong vài giây Cách xử lý 429 phản hồi HTTPTrong một số trường hợp, bạn nhận được phản hồi 429 hoặc các phản hồi giới hạn tỷ lệ khác. Rất có khả năng trang web hiểu rằng bạn đang cạo nó và đang cố ngăn bạn Cạo với tốc độ chậm hơn có thể là giải pháp. Hoặc bạn có thể sử dụng proxy (vì đó là một điểm thú vị, tôi sẽ viết một bài viết về điều đó sau) Phần kết luậnXin chúc mừng nếu bạn đã đến đây. Bằng cách truy cập trực tiếp vào lưu lượng truy cập mạng của trang web, chúng tôi đã quản lý để trích xuất dữ liệu không thể truy cập theo cách cổ điển. Hy vọng bạn đã học được một số thứ và thích đọc nó Tôi có thể sử dụng Python để cạo dữ liệu không?Thay vì xem trang web việc làm mỗi ngày, bạn có thể sử dụng Python để giúp tự động hóa các phần lặp đi lặp lại trong tìm kiếm việc làm của mình . Quét web tự động có thể là một giải pháp để tăng tốc quá trình thu thập dữ liệu. Bạn viết mã của mình một lần và nó sẽ nhận được thông tin bạn muốn nhiều lần và từ nhiều trang.
Làm cách nào để giám sát lưu lượng mạng bằng Python?nhập thời gian nhập psutil UPDATE_DELAY = 1 # tính bằng giây def get_size(byte). """ Trả về kích thước của byte ở định dạng đẹp """ cho đơn vị trong ['', 'K', 'M', 'G', 'T', 'P']. nếu byte < 1024. trả lại f"{byte. 2f}{unit}B" byte /= 1024 # lấy số liệu thống kê I/O của mạng từ psutil io = psutil Mô-đun Python nào được sử dụng để quét web?Những thư viện nào được sử dụng để quét web bằng Python? . Requests, BeautifulSoup, Scrapy, and Selenium, are some popular libraries used for web scraping in Python.
Các cách để cạo dữ liệu là gì?Kỹ thuật thu thập dữ liệu . Phân tích cú pháp HTML. Phân tích cú pháp HTML liên quan đến việc sử dụng JavaScript để nhắm mục tiêu trang HTML tuyến tính hoặc lồng nhau. . Phân tích cú pháp DOM. . Tổng hợp theo chiều dọc. . XPath. . Google Trang tính. . Tỷ lệ giới hạn Yêu cầu người dùng. . Giảm thiểu những người yêu cầu số lượng lớn bằng CAPTCHA. . Thường xuyên sửa đổi đánh dấu HTML |