Thư viện trình thu thập dữ liệu PHP
Trong hướng dẫn cạo web này, chúng ta sẽ xem xét PHP và cách sử dụng nó để cạo web. Mặc dù Javascript và Python là ngôn ngữ phổ biến nhất để quét web, PHP có sẵn hầu hết các công cụ tương tự mà chúng ta sẽ xem xét sâu ngày hôm nay Show
Chúng ta sẽ bắt đầu với tổng quan về những kiến thức cơ bản về cạo như cách gửi yêu cầu HTTP và cách phân tích cú pháp HTML - tất cả những điều này bằng cách sử dụng hai thư viện cạo web PHP phổ biến nhất. Guzzle và DomCrawler Cuối cùng, chúng ta sẽ kết thúc mọi thứ bằng một dự án ví dụ thực tế bằng cách thu thập thông tin sản phẩm từ https. //www. săn lùng sản phẩm. com/ Quét web là gì?Quét web là thu thập dữ liệu công khai và có hàng ngàn lý do tại sao người ta có thể muốn thu thập dữ liệu công khai này, từ tìm kiếm nhân viên tiềm năng đến tình báo cạnh tranh Tại ScrapFly, chúng tôi đã nghiên cứu sâu rộng về các ứng dụng quét web, xem bài viết về các trường hợp sử dụng quét web của chúng tôi Tại sao Web Scrape với PHP?PHP nổi tiếng là một trong những ngôn ngữ web phía máy chủ phổ biến nhất, điều đó có nghĩa là nó tuyệt vời cho các trình dọn dẹp thời gian thực được nhúng. Không chỉ vậy, PHP chạy trên nhiều hệ thống và dễ dàng truy cập Cài đặtChúng tôi cần hai công cụ. ứng dụng khách HTTP và trình phân tích cú pháp HTML.
Chúng tôi sẽ chia hướng dẫn này thành hai phần, mỗi phần phản ánh một trong những công cụ này. trước tiên, chúng ta sẽ xem xét việc thu thập dữ liệu bằng cách sử dụng Guzzle và sau đó chúng ta sẽ phân tích cú pháp các tài liệu này bằng khả năng trình phân tích cú pháp dom của DomCrawler Yêu cầuPHP cung cấp nhiều ứng dụng khách HTTP, tuy nhiên hai ứng dụng được sử dụng phổ biến nhất là. Ứng dụng cuộn tròn của thư viện tiêu chuẩn và ứng dụng khách cộng đồng phổ biến nhất có tên là Guzzle.
Vì vậy, để tóm tắt, Guzzle dễ sử dụng hơn và thường nhanh hơn trong khi thư viện curl có nhiều tính năng phong phú hơn nhưng khó sử dụng hơn và khó tối ưu hóa hơn. Hiện tại, chúng ta sẽ gắn bó với Guzzle, nhưng trước khi tìm hiểu kỹ về nó, chúng ta hãy tìm hiểu tổng quan nhanh về HTTP là gì? Nguyên tắc cơ bản về giao thức HTTPĐể thu thập dữ liệu từ một tài nguyên công cộng, trước tiên chúng ta cần thiết lập kết nối với nó. Hầu hết web được phục vụ qua HTTP, điều này khá đơn giản. chúng tôi (khách hàng) gửi yêu cầu về một tài liệu cụ thể tới trang web (máy chủ) và sau khi máy chủ xử lý yêu cầu của chúng tôi, nó sẽ trả lời bằng phản hồi (tài liệu của anh ấy) - một cuộc trao đổi rất thẳng thắn minh họa về trao đổi http tiêu chuẩn Như bạn có thể thấy trong hình minh họa này. chúng tôi gửi một đối tượng yêu cầu bao gồm một phương thức (còn gọi là loại), vị trí và tiêu đề. Đổi lại, chúng tôi nhận được một đối tượng phản hồi bao gồm mã trạng thái, tiêu đề và nội dung tài liệu. Yêu cầu và Phản hồi là gì?Khi nói đến việc quét web, chúng ta không cần biết chính xác mọi chi tiết nhỏ về giao thức HTTP mặc dù chúng ta nên làm quen với khái niệm yêu cầu và phản hồi Phương thức yêu cầuCác yêu cầu HTTP được chia thành một số loại thực hiện các chức năng riêng biệt một cách thuận tiện
Hầu hết chúng ta sẽ gặp ba điều này khi tìm kiếm trên web. Chúng tôi sẽ sử dụng 4 để truy xuất các trang web, 5 để gửi biểu mẫu tìm kiếm và các hành động khác trên trang web và 6 để chọc vào các trang web và xem liệu chúng có đáng để tìm kiếm hay khôngCác phương thức yêu cầu khác hiếm khi gặp phải trong quá trình quét web là
Yêu cầu vị tríURL (vị trí tài nguyên chung) cho biết chúng tôi đang yêu cầu tài nguyên nào. Chúng ta có thể coi nó như một ID được tạo từ nhiều phần khác nhau Ví dụ về cấu trúc URL Tại đây, chúng tôi có thể trực quan hóa từng phần của URL. chúng tôi có giao thức mà khi nói đến HTTP là 3 hoặc 4, sau đó chúng tôi có máy chủ lưu trữ là địa chỉ (hoặc miền) của máy chủ và cuối cùng, chúng tôi có vị trí của tài nguyên và một số tham số tùy chỉnh. Nếu bạn không chắc chắn về cấu trúc của URL, bạn luôn có thể kích hoạt trình bao tương tác của PHP ( 5) và để nó tìm ra câu trả lời cho bạn. 2Tiêu đề yêu cầuMặc dù có vẻ như các tiêu đề yêu cầu chỉ là chi tiết siêu dữ liệu nhỏ trong quá trình quét web nhưng chúng cực kỳ quan trọng. Chúng ta hãy xem một số tiêu đề quan trọng nhất và ý nghĩa của chúng Tác nhân người dùng là tiêu đề nhận dạng cho máy chủ biết ai đang yêu cầu tài liệu
Bất cứ khi nào bạn truy cập một trang web trong trình duyệt web của mình, nó sẽ tự xác định chính nó bằng một chuỗi Tác nhân người dùng giống như "Tên trình duyệt, Hệ điều hành, Một số số phiên bản". Có nhiều cơ sở dữ liệu trực tuyến chứa các chuỗi tác nhân người dùng mới nhất của nhiều nền tảng khác nhau, như cơ sở dữ liệu tác nhân người dùng của whatismyborwser. com Cookie được sử dụng để lưu trữ dữ liệu liên tục. Đây là một tính năng quan trọng cho các trang web để theo dõi trạng thái người dùng. thông tin đăng nhập của người dùng, tùy chọn cấu hình, v.v. Chấp nhận các tiêu đề (cũng như Mã hóa chấp nhận, Ngôn ngữ chấp nhận, v.v. ) chứa thông tin về loại nội dung mà chúng tôi mong đợi. Nói chung, khi quét web, chúng tôi muốn bắt chước điều này của một trong những trình duyệt web phổ biến, như việc sử dụng trình duyệt Chrome
Để biết thêm thông tin, hãy xem tài liệu về các giá trị được chấp nhận mặc định của MDN Tiêu đề tiền tố X là tiêu đề tùy chỉnh đặc biệt. Đây là những điều quan trọng cần theo dõi khi cạo web, vì chúng có thể định cấu hình chức năng quan trọng của trang web/ứng dụng web đã cạo Đây là một số quan sát quan trọng nhất, để biết thêm, hãy xem tài liệu đầy đủ mở rộng tại tài liệu tiêu đề http tiêu chuẩn của MDN Mã trạng thái phản hồiThuận tiện, tất cả các phản hồi HTTP đều đi kèm với mã trạng thái cho biết yêu cầu này là thành công, thất bại hay một số hành động thay thế được yêu cầu (như xác thực).
Để biết thêm về mã trạng thái http, hãy xem tài liệu trạng thái HTTP tại MDN Tiêu đề phản hồiKhi nói đến việc quét web, các tiêu đề phản hồi cung cấp một số thông tin quan trọng về chức năng và hiệu quả của kết nối. Ví dụ: tiêu đề 8 yêu cầu khách hàng của chúng tôi lưu một số cookie cho các yêu cầu trong tương lai, điều này có thể quan trọng đối với chức năng của trang web. Các tiêu đề khác như 9, 90 nhằm giúp khách hàng lưu vào bộ đệm để tối ưu hóa việc sử dụng tài nguyênCuối cùng, giống như với các tiêu đề yêu cầu, các tiêu đề có tiền tố là 91 là các tiêu đề chức năng web tùy chỉnhChúng ta đã xem qua sơ lược về các thành phần cốt lõi của HTTP, và bây giờ là lúc chúng ta thử xem HTTP hoạt động như thế nào trong PHP thực tế Thực hiện các yêu cầu GETTrong phần này, chúng ta sẽ sử dụng ứng dụng khách Guzzle HTTP và khám phá cách ứng dụng này được sử dụng trong các tác vụ quét web phổ biến Trước tiên, chúng ta cần tạo một đối tượng 92, còn được gọi là phiên Nhóm kết nối hoặc phiên kết nối liên tục HTTP. Chúng tôi sẽ sử dụng đối tượng này để xử lý cấu hình của chúng tôi và gửi yêu cầu 9Ở đây chúng tôi đang sử dụng https. //httpbin. dịch vụ thử nghiệm org/HTTP để truy xuất một trang HTML đơn giản. Khi chạy, tập lệnh này sẽ in ra mã trạng thái (e. g. 200), tiêu đề (thông tin meta) và nội dung (dữ liệu tài liệu) Thực hiện các yêu cầu POSTĐôi khi trình quét web của chúng tôi có thể cần gửi một số loại biểu mẫu để truy xuất kết quả HTML. Ví dụ: truy vấn tìm kiếm thường sử dụng yêu cầu 5 với chi tiết truy vấn dưới dạng giá trị JSON 4Guzzle đủ thông minh để chuyển đổi mảng kết hợp của PHP của chúng tôi thành các giá trị biểu mẫu hoặc JSON chính xác để gửi biểu mẫu. Dựa trên đối số 94, nó sẽ chuẩn bị yêu cầu với các tiêu đề 95 thích hợp và chuyển đổi giá trị phần thân từ một mảng kết hợp thành JSON hoặc một đối tượng biểu mẫuĐặt tiêu đề để ngăn chặn chặnNhư chúng tôi đã đề cập trước đó, các yêu cầu của chúng tôi phải cung cấp siêu dữ liệu về chính chúng để giúp máy chủ xác định nội dung nào sẽ trả về. Về cơ bản, các tiêu đề 96 và 97 thường là quà tặng đã chết, vì vậy khi tạo 92, chúng tôi có thể đặt chúng thành các giá trị mà trình duyệt Chrome bình thường sẽ sử dụng 0Điều này sẽ đảm bảo rằng mọi yêu cầu mà khách hàng đang thực hiện sẽ bao gồm các tiêu đề mặc định này Lưu ý rằng đây chỉ là phần nổi của tảng băng chìm khi nói đến tiêu đề yêu cầu và chặn bot, tuy nhiên, chỉ đặt tiêu đề ________ 196 và ________ 197 sẽ khiến chúng tôi khó phát hiện hơn nhiều Cách các tiêu đề được sử dụng để chặn trình quét web và cách khắc phục Để biết thêm về cách các tiêu đề được sử dụng trong chặn trình quét web, hãy xem hướng dẫn tổng quan đầy đủ của chúng tôi Bây giờ chúng ta đã biết cách thực hiện đúng các yêu cầu bằng cách sử dụng Guzzle, hãy xem cách chúng ta có thể làm cho chúng nhanh hơn nhiều bằng cách sử dụng cấu trúc mã không đồng bộ Tăng tốc với các yêu cầu không đồng bộVì giao thức HTTP là giao thức trao đổi dữ liệu giữa hai bên nên có rất nhiều sự chờ đợi liên quan. Cách chính để xử lý các khối IO trong PHP là sử dụng các lời hứa hoặc lệnh gọi lại không đồng bộ. Nói cách khác, khi chúng tôi đưa ra yêu cầu, ứng dụng khách HTTP trả lại cho chúng tôi một đối tượng "hứa hẹn" sẽ chuyển thành nội dung vào một lúc nào đó trong tương lai. Điều này cho phép chúng tôi lên lịch đồng thời cho nhiều yêu cầu giúp trình quét web của chúng tôi nhanh hơn đáng kể Hãy xem mã đồng bộ thực hiện 10 yêu cầu 3Ở đây chúng tôi đang thực hiện 10 yêu cầu tới https. //httpbin. org/html và nếu chúng tôi chạy mã thì sẽ mất khoảng 41 giây để hoàn thành. Nghe có vẻ không nhiều nhưng tỷ lệ này gần như tuyến tính. nếu chúng tôi thực hiện 100 yêu cầu sẽ là 50 giây; Thay vào đó, hãy sử dụng lập trình không đồng bộ với lời hứa 5Ở đây, chúng tôi đã làm lại mã của mình từ mã đồng bộ sang cấu trúc lời hứa + gọi lại/lỗi. Chúng tôi đang tạo 10 đối tượng 42 và chuyển chúng đến nhóm yêu cầu sẽ gửi tất cả chúng cùng nhau. Chúng tôi cũng cung cấp 2 chức năng cho nhóm của mình. phải làm gì với mỗi yêu cầu thành công và phải làm gì với mỗi yêu cầu không thành công. Lý tưởng nhất là chúng tôi muốn đăng nhập/thử lại những cái không thành công và phân tích dữ liệu từ những cái tốt. Ở đây, 10 yêu cầu tương tự hoàn thành sau 1-2 giây, nhanh hơn ít nhất 5 lần so với ví dụ đồng bộ của chúng tôi từ trước. Khi thực hiện hàng nghìn yêu cầu, cách tiếp cận không đồng bộ thường có thể nhanh hơn hàng trăm lần Trong phần này, chúng tôi đã đề cập đến cách chúng tôi có thể truy xuất tài liệu HTML và cách chúng tôi có thể thực hiện việc đó một cách nhanh chóng mà không bị chặn. Tiếp theo, hãy xem làm thế nào chúng ta có thể trích xuất dữ liệu từ HTML và cuối cùng kết hợp mọi thứ lại với nhau thành một ví dụ thống nhất Phân tích nội dung HTMLHTML (Ngôn ngữ đánh dấu siêu văn bản) là một cấu trúc dữ liệu văn bản cung cấp năng lượng cho web. Điều tuyệt vời về nó là nội dung văn bản có thể đọc được bằng máy, đây là một tin tuyệt vời cho việc quét web vì chúng ta có thể dễ dàng phân tích cú pháp dữ liệu bằng mã HTML DOM (Cấu trúc đối tượng tài liệu) là một cấu trúc kiểu cây dễ dàng cho phép máy phân tích cú pháp. Ví dụ: hãy lấy nội dung HTML đơn giản này 7Ở đây chúng ta thấy một tài liệu HTML cực kỳ cơ bản mà một trang web đơn giản có thể phục vụ. Bạn đã có thể thấy cấu trúc dạng cây chỉ bằng cách thụt lề văn bản, nhưng chúng ta thậm chí có thể đi xa hơn và minh họa nó ví dụ về cây nút HTML. Lưu ý rằng các nhánh được sắp xếp theo thứ tự (từ trái sang phải) Cấu trúc cây này rất phù hợp để quét web vì chúng tôi có thể dễ dàng điều hướng toàn bộ tài liệu. 43, đến lượt nó lại nằm dưới phần tử 44, v.v. Nói cách khác - nếu chúng tôi muốn trích xuất 1000 tiêu đề cho 1000 trang khác nhau, chúng tôi sẽ viết một quy tắc để tìm 45 cho mỗi tiêu đề. Khi nói đến phân tích cú pháp HTML, có hai cách tiêu chuẩn để viết các quy tắc này. Bộ chọn CSS và bộ chọn XPath - hãy tìm hiểu sâu hơn và xem cách chúng tôi có thể sử dụng chúng để phân tích dữ liệu được loại bỏ trên web Sử dụng DomCrawlerChúng tôi sẽ sử dụng 46 làm trình phân tích cú pháp tài liệu HTML của mình và nó hỗ trợ cả bộ chọn CSS và bộ chọn XPATH mà chúng tôi đã đề cập sâu trong các bài viết trước. Phân tích cú pháp HTML bằng Bộ chọn CSS và Phân tích cú pháp HTML bằng XpathHãy bắt đầu với một ví dụ phân tích cú pháp dựa trên bộ chọn XPath đơn giản 2Trong ví dụ trên, chúng tôi đã xác định một tài liệu HTML mẫu, xây dựng một đối tượng cây ( 47) và sử dụng bộ chọn XPATH đơn giản để trích xuất thuộc tính 48 của liên kết đầu tiênTuy nhiên, thường thì các bộ chọn CSS có thể là một giải pháp tao nhã hơn. Đối với điều này, chúng tôi có thể cài đặt bộ chọn css phụ thuộc tùy chọn cung cấp hỗ trợ bộ chọn CSS cho đối tượng 47 của chúng tôi 0Có nhiều thứ hơn nữa đối với 46 ngoài các bộ chọn XPath và CSS nhưng để quét web, chúng tôi chủ yếu quan tâm đến hai tính năng này. Bây giờ chúng ta đã quen thuộc với chúng, hãy xây dựng một công cụ quét web thực sựDự án mẫuĐã đến lúc đưa mọi thứ chúng ta đã học vào một ví dụ về công cụ quét trang web PHP. Trong phần này, chúng ta sẽ cạo https. //www. săn lùng sản phẩm. com/ về cơ bản là một thư mục sản phẩm kỹ thuật nơi mọi người gửi và thảo luận về các sản phẩm công nghệ mới Trình quét của chúng tôi sẽ tìm các url sản phẩm (e. g. ) từ một thư mục sản phẩm (e. g. https. //www. săn lùng sản phẩm. com/topics/developer-tools) và cạo từng sản phẩm cho các trường. tiêu đề, phụ đề, phiếu bầu và thẻ Hãy xem toàn bộ kịch bản cạo và sau đó hãy xem các hành động/thành phần riêng lẻ 1Điều này có vẻ khá dài, vì vậy hãy chia nhỏ nó ra và xem xét các bước riêng lẻ mà chúng tôi đang thực hiện ở đây
Nếu chúng ta chạy tập lệnh này, chúng ta sẽ thấy đầu ra giống như thế này 2API ScrapFly trong PHPScrapFly cung cấp dịch vụ phần mềm trung gian có thể giải quyết rất nhiều thách thức về việc quét web cho bạn. Hãy xem nhanh các giải pháp của ScrapFly và cách chúng tôi có thể áp dụng chúng trong công cụ quét web PHP của mình Hiển thị Javascript Giải pháp bảo vệ chống lấy cắp dữ liệu Proxy thông minh Chúng ta hãy xem nhanh cách chúng ta có thể kích hoạt phần mềm trung gian ScrapFly trong trình quét web PHP 3Trong ví dụ này, chúng tôi đang thực hiện một yêu cầu đơn giản thông qua ScrapFly với các tùy chọn đặc biệt như vị trí proxy, kết xuất javascript, v.v. Việc sử dụng ScrapFly cho phép chúng tôi tập trung vào việc tạo trình quét web thay vì các sự cố kết nối và khối nhện khác nhau - hãy thử đi Câu hỏi thường gặpHãy kết thúc bài viết này với một số câu hỏi thường gặp liên quan đến quét web trong PHP Trình duyệt không đầu có thể được sử dụng trong trình dọn dẹp PHP không?Có, php-webdriver có thể được sử dụng làm ứng dụng khách Selenium để khởi chạy trình duyệt web thực và truy xuất dữ liệu web bằng các hành động của trình duyệt web thay vì ứng dụng khách Guzzle HTTP mà chúng tôi sử dụng ngày nay Sự khác biệt giữa Thu thập dữ liệu và Cạo là gì?Thu thập thông tin web liên quan đến một số thành phần bổ sung giúp trình quét khám phá các trang web. Trong hướng dẫn này, chúng tôi đã đề cập đến việc cạo khi chúng tôi cung cấp các URL để cạo trực tiếp. Mặt khác, trình thu thập dữ liệu web sẽ là chương trình có thể tự tìm URL sản phẩm bằng cách khám phá trang web đã cho Tóm lượcTrong bài viết giới thiệu mở rộng này, chúng ta đã có cái nhìn tổng quan về quét web cơ bản trong PHP. Chúng tôi đã nhanh chóng giới thiệu về giao thức HTTP và cấu trúc cây HTML. Hơn nữa, chúng tôi đã xem xét hai thư viện quét web phổ biến nhất. Guzzle là ứng dụng khách http hiện đại và DomCrawler cho phép chúng tôi phân tích dữ liệu từ tài liệu HTML trong bộ chọn XPATH hoặc CSS. Đó mới chỉ là khởi đầu của hành trình quét web của bạn. Chúng tôi chưa đề cập đến nhiều thách thức trong việc quét web như chặn truy cập, proxy, nội dung động và nhiều kỹ thuật mở rộng - vẫn còn nhiều điều cần tìm hiểu, nhưng phần giới thiệu này sẽ là một điểm khởi đầu tốt Để kết thúc vấn đề này, chúng ta sẽ xem xét dịch vụ phần mềm trung gian của ScrapFly, dịch vụ này tự động giải quyết các sự cố quét web phổ biến như chặn và kết xuất dữ liệu động - hãy dùng thử miễn phí Trình thu thập thông tin PHP là gì?Tìm kiếm web cho phép bạn thu thập dữ liệu từ các trang web trên internet . Nó còn được gọi là thu thập dữ liệu web hoặc khai thác dữ liệu web. PHP là ngôn ngữ kịch bản phụ trợ được sử dụng rộng rãi để tạo các trang web và ứng dụng web động. Và bạn có thể triển khai trình quét web bằng mã PHP đơn giản.
Làm cách nào để tạo trình thu thập dữ liệu web bằng PHP?Để tạo trình thu thập thông tin web đơn giản, chỉ cần một bước. -
. // trang web mẫu. com"; $str = file_get_contents($main_url); // Lấy tiêu đề trang web if(strlen($str)>0) { $str = trim(preg_replace('/\s+/', ' ', $str));
Làm cách nào để cạo HTML bằng PHP?Tạo trình quét web của riêng bạn . Kiểm tra nội dung trang web. Hầu hết nội dung web được hiển thị bằng HTML. . Gửi yêu cầu từ PHP. Gửi yêu cầu, trong trường hợp này, về cơ bản có nghĩa là truy cập trực tiếp vào HTML của trang bằng mã PHP. . Trích xuất dữ liệu. . Xuất dữ liệu Làm cách nào để thu thập dữ liệu từ một trang web bằng PHP?Bạn có thể lấy tại đây. . Bước 1. Tạo một tệp PHP mới có tên là scraper. php và bao gồm thư viện được đề cập bên dưới. . Bước 2. Trích xuất nội dung trả về html từ trang web. . Bước 3. Cạo các lĩnh vực đánh giá. . Bước 4. Lưu trữ dữ liệu vào tệp xml bằng cách sử dụng “SimpleXMLEuity” |