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

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 đặt

Chú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.
Cả hai công cụ này đều có sẵn trong PHP dưới dạng một số thư viện cộng đồng mặc dù trong hướng dẫn này, chúng tôi sẽ tập trung vào hai thư viện cụ thể.

  • Guzzle - Thư viện máy khách HTTP giúp chúng tôi truy xuất nội dung trang web
  • DomCrawler - Ứng dụng phân tích cú pháp HTML giúp chúng tôi trích xuất các chi tiết cụ thể mà chúng tôi muốn từ các tài liệu HTML đầy đủ của trang web

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ầu

PHP 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.
Có nhiều điểm khác biệt giữa hai ứng dụng khách này nhưng khi nói đến việc quét web thì những điểm chính là.

  • Guzzle mang đến trải nghiệm người dùng tốt hơn
    API thư viện hiện đại và thân thiện với người dùng hơn cho phép chúng tôi xử lý các trường hợp ngoại lệ, thử lại và lỗi dễ dàng hơn nhiều, giúp trình quét web của Guzzle dễ bảo trì hơn.
  • Guzzle cung cấp hỗ trợ không đồng bộ
    Chúng ta sẽ nói nhiều hơn về mã đồng bộ và mã không đồng bộ nhưng về cơ bản, ứng dụng khách không đồng bộ cho phép chúng tôi thực hiện nhiều yêu cầu song song, giúp trình quét web của chúng tôi nhanh hơn nhiều.
  • Guzzle không hỗ trợ các giao thức http2 hoặc http3[QUIC] mới hơn
    Hiện tại, có 3 giao thức HTTP đang hoạt động. http1. 1, http2 và http3 [còn gọi là QUIC]. Mặc dù hiệu suất đạt được khi quét web trong http2/3 không đáng kể, nhưng các kết nối http1 có thể khiến trình quét web bị chặn. Điều đó đang được nói, chúng tôi sẽ đề cập đến một số cách để giải quyết vấn đề này sau trong bài viết.

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.
Chúng ta hãy xem nhanh từng thành phần này, ý nghĩa của chúng và mức độ liên quan của chúng trong việc quét web.

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ầu

Cá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

  • Yêu cầu
    # example user agent for Chrome browser on Windows operating system:
    Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
    
    4 nhằm yêu cầu một tài liệu
  • Yêu cầu
    # example user agent for Chrome browser on Windows operating system:
    Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
    
    5 nhằm yêu cầu tài liệu bằng cách gửi tài liệu
  • Yêu cầu
    # example user agent for Chrome browser on Windows operating system:
    Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
    
    6 nhằm yêu cầu thông tin meta của tài liệu

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

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
4 để truy xuất các trang web,
# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
5 để gửi biểu mẫu tìm kiếm và các hành động khác trên trang web và
# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
6 để chọc vào các trang web và xem liệu chúng có đáng để tìm kiếm hay không

Cá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à

  • text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    
    0 yêu cầu nhằm cập nhật một tài liệu
  • Các yêu cầu của
    text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    
    1 nhằm mục đích tạo một tài liệu mới hoặc cập nhật nó
  • text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    
    2 yêu cầu nhằm xóa một tài liệu.
    Không chắc chúng ta sẽ thấy những thứ này khi tìm kiếm trên web nhưng thật tốt khi biết chúng là gì.

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à

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
3 hoặc
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
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 [
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
5] và để nó tìm ra câu trả lời cho bạn.

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
2

Tiêu đề yêu cầu

Mặ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.
Tiêu đề chứa thông tin chi tiết cần thiết về yêu cầu, chẳng hạn như ai đang yêu cầu dữ liệu? . Làm sai những điều này có thể dẫn đến việc trình quét web bị từ chối truy cập hoặc trả về phản hồi lỗi.

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

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36

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".
Điều này giúp máy chủ xác định nên phục vụ hay từ chối máy khách. Trong quá trình quét web, chúng tôi [rõ ràng] không muốn bị từ chối truy cập, vì vậy chúng tôi phải trà trộn vào bằng cách giả mạo tác nhân người dùng của mình trông giống như tác nhân đó của trình duyệt.

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

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

Để 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ồi

Thuậ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].
Chúng ta hãy xem nhanh các mã trạng thái có liên quan nhất đến việc quét web.

  • 200 mã phạm vi có nghĩa là thành công
  • 300 mã phạm vi có nghĩa là chuyển hướng - trang hiện đang ở một nơi khác.
    Nói cách khác, nếu chúng tôi yêu cầu nội dung của
    text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    
    6 thì nội dung đó có thể được chuyển đến một vị trí mới như
    text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    
    7.
  • 400 mã phạm vi có nghĩa là yêu cầu không đúng định dạng hoặc bị từ chối.
    Điều này thường xảy ra nếu trình quét web của chúng tôi thiếu một số tiêu đề, cookie hoặc chi tiết xác thực.
  • 500 mã phạm vi thường có nghĩa là sự cố máy chủ.
    Trang web có thể không khả dụng ngay bây giờ hoặc đang cố tình vô hiệu hóa quyền truy cập vào công cụ quét web của chúng tôi.

Để 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ồi

Khi 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 đề

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
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ư
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
9,
# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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ên

Cuố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à

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
91 là các tiêu đề chức năng web tùy chỉnh

Chú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 GET

Trong 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

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
5 với chi tiết truy vấn dưới dạng giá trị JSON

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
4

Guzzle đủ 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ố

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
94, nó sẽ chuẩn bị yêu cầu với các tiêu đề
# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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ặn

Như 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ề.
Thông thường, siêu dữ liệu này có thể được sử dụng để xác định những người quét web và chặn chúng. Các trình duyệt web hiện đại tự động bao gồm các chi tiết siêu dữ liệu cụ thể với mọi yêu cầu, vì vậy nếu chúng tôi không muốn nổi bật như một công cụ quét web, chúng tôi nên sao chép hành vi này.

Về cơ bản, các tiêu đề

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
96 và
# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
97 thường là quà tặng đã chết, vì vậy khi tạo
# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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.
Nói cách khác, khi ứng dụng khách của chúng tôi gửi yêu cầu, nó cần đợi yêu cầu đó di chuyển đến máy chủ và quay trở lại, điều này sẽ làm chương trình của chúng tôi bị đình trệ. Tại sao chương trình của chúng tôi phải ngồi yên và chờ đợi các yêu cầu đi khắp thế giới? .

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

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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 HTML

HTML [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

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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.
Ví dụ: để tìm tiêu đề của trang web, chúng ta có thể thấy rằng nó nằm dưới phần tử HTML

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
43, đến lượt nó lại nằm dưới phần tử
# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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
# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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 DomCrawler

Chúng tôi sẽ sử dụng

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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 Xpath

Hã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

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
2

Trong 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 [

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
47] và sử dụng bộ chọn XPATH đơn giản để trích xuất thuộc tính
# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
48 của liên kết đầu tiên

Tuy 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

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
47 của chúng tôi

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
0

Có nhiều thứ hơn nữa đối với

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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ẻ

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
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

  1. Chúng tôi thiết lập đối tượng toàn cầu
    # example user agent for Chrome browser on Windows operating system:
    Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
    
    92 sẽ xử lý tất cả các kết nối
  2. Sau đó, chúng tôi đã xác định hàm cạp không đồng bộ của mình, hàm này lấy danh sách các URL cần cạo và 2 hàm [hoặc tên hàm] sẽ được gọi khi thành công hoặc không thành công. Đây là trình thực thi cạo trừu tượng của chúng tôi
  3. Hơn nữa, chúng tôi xác định các cuộc gọi lại phân tích cú pháp của chúng tôi. Khi sản phẩm cạo thành công,
    # example user agent for Chrome browser on Windows operating system:
    Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
    
    02 sẽ được gọi sẽ trích xuất dữ liệu từ HTML và nối nó vào biến lưu trữ
    # example user agent for Chrome browser on Windows operating system:
    Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
    
    03
  4. Chúng tôi cũng làm điều tương tự với
    # example user agent for Chrome browser on Windows operating system:
    Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
    
    04 sẽ được gọi khi một thư mục cạo thành công và cạo tất cả các sản phẩm được tìm thấy
  5. Chúng tôi cũng cần một trình xử lý lỗi phổ biến, đó là chức năng
    # example user agent for Chrome browser on Windows operating system:
    Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
    
    05 của chúng tôi. Lý tưởng nhất là trong quá trình sản xuất, chúng tôi muốn triển khai một số loại chức năng thử lại hoặc lưu trữ lỗi trong cơ sở dữ liệu để thử lại sau [hiện tại, hãy ghi nhật ký chúng]
  6. Cuối cùng, chúng tôi hoàn thành mọi thứ bằng một tập lệnh nhỏ thực thi logic của chúng tôi. Chúng tôi xác định
    # example user agent for Chrome browser on Windows operating system:
    Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
    
    06 chứa các URL tới thư mục sản phẩm và lên lịch cho toàn bộ logic cạo

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

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
2

API ScrapFly trong PHP

ScrapFly 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
Vì PHP không thể hiển thị javascript được nhúng trong nội dung HTML nên trình quét web của chúng tôi sẽ thấy các kết quả khác so với trình duyệt của chúng tôi. Để giải quyết vấn đề này, chúng ta cần đảo ngược hành vi javascript trong mã PHP của mình hoặc sử dụng trình giả lập trình duyệt để hiển thị javascript trước khi bắt đầu phân tích cú pháp trong mã của mình.
ScrapFly cung cấp dịch vụ hiển thị javascript sử dụng trình duyệt tự động để hiển thị đầy đủ trang web và sau đó chuyển nội dung tới trình quét của chúng tôi.

Giải pháp bảo vệ chống lấy cắp dữ liệu
Mặc dù PHP cung cấp các công cụ kết nối tuyệt vời nhưng chúng hơi thiếu trong bối cảnh web hiện đại, do đó, các công cụ quét web PHP có thể được phát hiện bằng nhiều biện pháp chống bot khác nhau. Đối với các trang web cạo được bảo vệ bằng hình ảnh xác thực hoặc một số giải pháp chống bot Phần mềm trung gian ScrapFly cũng cung cấp giải pháp bảo vệ chống cạo.

Proxy thông minh
Một số nội dung web chỉ có thể được truy cập ở các quốc gia cụ thể, nghĩa là trình quét web của chúng tôi phải sử dụng kết nối proxy để truy cập nội dung này. ScrapFly cung cấp các tùy chọn proxy khác nhau như lựa chọn quốc gia và nhóm proxy thông minh chọn đúng proxy cho các yêu cầu gửi đi để tránh bị chặn.

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

# example user agent for Chrome browser on Windows operating system:
Mozilla/5.0 [Windows NT 10.0; Win64; x64] AppleWebKit/537.36 [KHTML, like Gecko] Chrome/96.0.4664.110 Safari/537.36
3

Trong 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ặp

Hã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ược

Trong 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.
Cuối cùng, chúng tôi đã kết thúc mọi thứ bằng một số ví dụ và công cụ thu thập dữ liệu sản phẩm nhỏ của https. //www. săn lùng sản phẩm. com/.

Đó 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”

Chủ Đề