JavaScript quét web bằng Python

Web hiện đại ngày càng trở nên phức tạp và phụ thuộc vào Javascript, điều này khiến việc tìm kiếm web truyền thống trở nên khó khăn. Trình quét web truyền thống trong python không thể thực thi javascript, nghĩa là chúng gặp khó khăn với các trang web động và đây là lúc Selenium - bộ công cụ tự động hóa trình duyệt - phát huy tác dụng

Tự động hóa trình duyệt thường được sử dụng trong quét web để tận dụng sức mạnh kết xuất của trình duyệt để truy cập nội dung động. Ngoài ra, nó thường được sử dụng để tránh chặn trình quét web vì các trình duyệt thực có xu hướng hòa nhập với đám đông dễ dàng hơn các yêu cầu HTTP thô

Chúng tôi đã đề cập ngắn gọn về 3 công cụ có sẵn Playwright, Puppeteer và Selenium trong bài viết tổng quan của chúng tôi và trong bài viết này, chúng tôi sẽ tìm hiểu sâu hơn một chút để hiểu về Selenium - bộ công cụ tự động hóa trình duyệt phổ biến nhất hiện có

Trong hướng dẫn Selenium với Python này, chúng ta sẽ xem Selenium là gì; . Chúng tôi sẽ đề cập đến một số mẹo và thủ thuật chung cũng như những thách thức phổ biến và kết thúc tất cả bằng một dự án mẫu bằng cách cạo twitch. TV

Thực hành dự án ví dụ và hướng dẫn cạo web Python

Để biết phần giới thiệu chung về quét web bằng Python, hãy xem hướng dẫn giới thiệu mở rộng của chúng tôi, hướng dẫn này tập trung vào việc sử dụng ứng dụng khách HTTP thay vì trình duyệt web

Selenium là gì?

Selenium ban đầu là một công cụ được tạo ra để kiểm tra hành vi của trang web, nhưng nó nhanh chóng trở thành một công cụ tự động hóa trình duyệt web chung được sử dụng trong quét web và các tác vụ tự động hóa khác

Công cụ này khá phổ biến và có khả năng tự động hóa các trình duyệt khác nhau như Chrome, Firefox, Opera và cả Internet Explorer thông qua phần mềm trung gian kiểm soát có tên là Selenium webdriver

Webdriver là giao thức tự động hóa trình duyệt đầu tiên được thiết kế bởi tổ chức W3C và về cơ bản nó là một dịch vụ giao thức phần mềm trung gian nằm giữa máy khách và trình duyệt, dịch các lệnh của máy khách thành các hành động của trình duyệt web

Selenium webdriver dịch các lệnh của máy khách python của chúng tôi sang thứ mà trình duyệt web có thể hiểu được

Hiện tại, đây là một trong hai giao thức có sẵn để tự động hóa trình duyệt web [giao thức còn lại là %url https. // chromedevtools. github. io/devtools-protocol/ "Chrome Devtools Protocol" %]] và trong khi đó là một giao thức cũ hơn, nó vẫn có khả năng và hoàn toàn khả thi để quét web - hãy xem nó có thể làm gì

Cài đặt Selenium

Selenium webdriver cho python có thể được cài đặt thông qua lệnh

$ pip install selenium
$ pip show selenium
Version: 3.141.0
4

$ pip install selenium

Tuy nhiên, chúng tôi cũng cần các trình duyệt hỗ trợ webdriver. Chúng tôi khuyên dùng trình duyệt Firefox và Chrome

  • ChromeDriver cho trình điều khiển Chrome
  • Geckodriver cho trình điều khiển Firefox

Để biết thêm hướng dẫn cài đặt, hãy xem hướng dẫn cài đặt Selenium chính thức

Điều hướng, chờ đợi và truy xuất

Khi nói đến web scraping, về cơ bản chúng ta cần một số chức năng cơ bản của Selenium API. điều hướng đến các trang web, đợi các phần tử tải và nhấp vào nút/cuộn trang

Cách dễ nhất để khám phá những chức năng cơ bản này là thử nghiệm với Selenium trong một REPL tương tác như

$ pip install selenium
$ pip show selenium
Version: 3.141.0
5. Xem bản demo nhanh này

0. 00

/

Trình điều khiển Selenium trong trình diễn ipython

Để tìm hiểu thêm về selen, hãy bắt đầu với dự án mẫu của chúng tôi.
Chúng tôi sẽ loại bỏ các luồng hiện tại khỏi https. //www. co giật. phần tv/art nơi người dùng truyền phát quá trình sáng tạo nghệ thuật của họ. Chúng tôi sẽ thu thập dữ liệu động như tên luồng, số lượng người xem và tác giả.

Nhiệm vụ hiện tại của chúng ta là

  1. Khởi động trình duyệt web Chrome
  2. truy cập https. //www. co giật. tv/thư mục/trò chơi/Nghệ thuật
  3. Đợi trang tải xong
  4. Chọn nội dung HTML của phiên bản trình duyệt hiện tại
  5. Phân tích dữ liệu từ nội dung HTML

Trước khi bắt đầu, hãy cài đặt chính Selenium

$ pip install selenium
$ pip show selenium
Version: 3.141.0

Để bắt đầu với mã cạp của chúng tôi, hãy tạo một đối tượng trình duyệt web Selenium và khởi chạy trình duyệt Chrome

from selenium import webdriver
driver = webdriver.Chrome[]
driver.get["//www.twitch.tv/directory/game/Art"]

Nếu chúng tôi chạy tập lệnh này, chúng tôi sẽ thấy một cửa sổ trình duyệt mở ra và đưa chúng tôi URL co giật của chúng tôi. Tuy nhiên, thông thường khi quét web, chúng tôi không muốn màn hình của mình bị chiếm bởi tất cả các thành phần GUI, vì điều này, chúng tôi có thể sử dụng một thứ gọi là chế độ không đầu để loại bỏ tất cả các thành phần GUI của trình duyệt và để nó chạy âm thầm trong nền. Trong Selenium, chúng ta có thể kích hoạt nó thông qua đối số từ khóa

$ pip install selenium
$ pip show selenium
Version: 3.141.0
6

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
...

# configure webdriver
options = Options[]
options.headless = True  # hide GUI
options.add_argument["--window-size=1920,1080"]  # set window size to native GUI size
options.add_argument["start-maximized"]  # ensure window is full-screen

...
driver = webdriver.Chrome[options=options]
#                         ^^^^^^^^^^^^^^^
driver.get["//www.twitch.tv/directory/game/Art"]

Ngoài ra, khi quét web, chúng tôi không cần kết xuất hình ảnh, đây là một quá trình chậm và chuyên sâu. Trong Selenium, chúng tôi có thể hướng dẫn trình duyệt Chrome bỏ qua hiển thị hình ảnh thông qua đối số từ khóa

$ pip install selenium
$ pip show selenium
Version: 3.141.0
7

________số 8

Nếu chúng tôi đặt cài đặt

$ pip install selenium
$ pip show selenium
Version: 3.141.0
8 trở lại
$ pip install selenium
$ pip show selenium
Version: 3.141.0
9, chúng tôi sẽ thấy rằng tất cả các trang tải mà không có bất kỳ hình ảnh phương tiện nào. Chúng vẫn ở đó, nhưng chúng không được tải xuống và nhúng vào chế độ xem của chúng tôi - giúp chúng tôi tiết kiệm rất nhiều tài nguyên và thời gian

Cuối cùng, chúng tôi có thể truy xuất một trang được hiển thị đầy đủ và bắt đầu phân tích dữ liệu. Trình điều khiển của chúng tôi có thể cung cấp cho chúng tôi nội dung của cửa sổ trình duyệt hiện tại [được gọi là nguồn trang] thông qua thuộc tính

from selenium import webdriver
driver = webdriver.Chrome[]
driver.get["//www.twitch.tv/directory/game/Art"]
0 nhưng nếu chúng tôi gọi nó quá sớm, chúng tôi sẽ nhận được một trang gần như trống vì chưa có gì được tải

May mắn thay, Selenium có nhiều cách để kiểm tra xem trang đã được tải hay chưa, tuy nhiên, cách đáng tin cậy nhất là kiểm tra xem một phần tử có trong trang thông qua bộ chọn CSS hay không

$ pip install selenium
2

Ở đây, chúng tôi đang sử dụng một đối tượng

from selenium import webdriver
driver = webdriver.Chrome[]
driver.get["//www.twitch.tv/directory/game/Art"]
1 đặc biệt để chặn chương trình của chúng tôi cho đến khi một điều kiện cụ thể được đáp ứng. Trong trường hợp này, điều kiện của chúng tôi là sự hiện diện của một phần tử mà chúng tôi chọn thông qua bộ chọn CSS

Phân tích dữ liệu động

Chúng tôi đã khởi động một trình duyệt, yêu cầu nó chuyển sang co giật. tv và đợi trang tải và truy xuất nội dung trang. Với những nội dung này trong tay, chúng tôi có thể hoàn thành dự án của mình và phân tích dữ liệu động liên quan

$ pip install selenium
4

Mặc dù selen cung cấp các khả năng phân tích cú pháp của riêng nó, nhưng chúng chỉ ngang bằng với những gì có sẵn trong hệ sinh thái của python. Sẽ hiệu quả hơn nhiều khi lấy nguồn HTML của trang được hiển thị và sử dụng các gói parsel hoặc beautifulsoup để phân tích nội dung này theo kiểu Pythonic và hiệu quả hơn. Trong ví dụ này, chúng tôi đã sử dụng phân tích cú pháp để trích xuất nội dung bằng bộ chọn XPATH và CSS

Quét web bằng Python và BeautifulSoup

Để phân tích cú pháp với BeautifulSoup, hãy xem bài viết chuyên sâu của chúng tôi bao gồm phần giới thiệu, mẹo và thủ thuật cũng như các phương pháp hay nhất

Trong phần này, chúng tôi đã đề cập đến trình quét web dựa trên Selenium cơ bản đầu tiên. Chúng tôi đã khởi chạy một phiên bản trình duyệt được tối ưu hóa, yêu cầu nó truy cập trang web của chúng tôi, đợi nội dung tải và trả lại cho chúng tôi tài liệu được hiển thị

Các chức năng cơ bản này sẽ giúp bạn tiến khá xa trong việc quét web, tuy nhiên, một số trường hợp cạnh có thể yêu cầu chức năng tự động hóa nâng cao hơn như nhấp vào nút phần tử, nhập văn bản và thực thi javascript tùy chỉnh - hãy xem qua các chức năng này

Chức năng Selenium nâng cao

Selenium là một thư viện tự động hóa khá mạnh mẽ, có khả năng nhiều hơn những gì chúng tôi đã khám phá thông qua twitch của mình. ví dụ truyền hình

Đối với người mới bắt đầu, đôi khi chúng tôi có thể cần nhấp vào nút và nhập văn bản vào biểu mẫu để truy cập nội dung mà chúng tôi muốn tìm kiếm trên web. Đối với điều này, chúng ta hãy xem làm thế nào chúng ta có thể sử dụng Twitch. thanh tìm kiếm tv. Chúng tôi sẽ tìm các phần tử HTML cho hộp tìm kiếm và nút tìm kiếm và gửi thông tin đầu vào của chúng tôi ở đó

$ pip install selenium
5

Trong ví dụ trên, chúng tôi đã sử dụng bộ chọn CSS để tìm hộp tìm kiếm và nhập một số khóa. Sau đó, để gửi tìm kiếm của chúng tôi, chúng tôi có tùy chọn gửi phím ENTER theo nghĩa đen hoặc tìm nút tìm kiếm và nhấp vào nút đó để gửi biểu mẫu tìm kiếm của chúng tôi

Cuối cùng, tính năng quan trọng cuối cùng được sử dụng trong web-scraping là thực thi javascript. Về cơ bản, Selenium cung cấp cho chúng tôi một Trình thông dịch Javascript đầy đủ, đang chạy, cho phép chúng tôi kiểm soát hoàn toàn tài liệu trang và một phần lớn của chính trình duyệt

Để minh họa điều này, chúng ta hãy xem thao tác cuộn.
Vì Twitch đang sử dụng cái gọi là "phân trang vô tận" để nhận kết quả từ trang thứ 2, nên chúng tôi phải hướng dẫn trình duyệt của mình cuộn xuống dưới cùng để kích hoạt tải trang tiếp theo.

$ pip install selenium
6

Trong ví dụ này, chúng tôi đã sử dụng thực thi javascript để tìm tất cả các phần tử web trong trang đại diện cho video và sau đó cuộn chế độ xem đến phần tử cuối cùng, phần tử này yêu cầu trang tạo trang kết quả thứ hai.
Có nhiều cách để cuộn nội dung trong trình duyệt web do Selenium kiểm soát, nhưng sử dụng phương pháp `scrollIntoView

from selenium import webdriver
driver = webdriver.Chrome[]
driver.get["//www.twitch.tv/directory/game/Art"]
2 là một trong những cách đáng tin cậy nhất để điều hướng chế độ xem của trình duyệt.

Trong phần này, chúng tôi đã đề cập đến các chức năng Selenium nâng cao chính được sử dụng trong quét web. đầu vào bàn phím, nhấp vào nút và thực thi javascript. Với kiến ​​thức đầy đủ này, chúng tôi đã sẵn sàng loại bỏ các trang web hỗ trợ javascript phức tạp như twitch. TV

Điều đó đang được nói, Selenium không phải là không có lỗi và vấn đề lớn nhất khi phát triển trình quét web bằng gói Selenium là mở rộng quy mô. Ngoài ra, trình duyệt sử dụng nhiều tài nguyên và chậm, thêm vào đó, Selenium không hỗ trợ lập trình không đồng bộ vốn có thể tăng tốc mọi thứ như Playwright và Puppeteer [như chúng tôi đã trình bày trong Tìm kiếm các trang web động bằng Tự động hóa trình duyệt], vì vậy, tại ScrapFly, chúng tôi cung cấp một Selenium có thể mở rộng như

Giải pháp thay thế của ScrapFly

API của ScrapFly triển khai các chức năng tự động hóa trình duyệt web cốt lõi. kết xuất trang, quản lý phiên/proxy, đánh giá javascript tùy chỉnh và quy tắc tải trang - tất cả đều giúp tạo ra một trình quét web dễ quản lý và có khả năng mở rộng cao

Một tính năng quan trọng của API của ScrapFly là kết hợp liền mạch kết xuất trình duyệt và các yêu cầu HTTP truyền thống - cho phép các nhà phát triển tối ưu hóa các công cụ dọn dẹp để phát huy hết tiềm năng của họ.

Hãy xem nhanh cách chúng ta có thể tái tạo sự co giật của mình. trình quét tv trong SDK của ScrapFly

$ pip install selenium
8

trong trình phát ScrapFly

API của ScrapFly đơn giản hóa toàn bộ quy trình thành một vài cấu hình tham số. Không chỉ vậy, nó còn tự động định cấu hình trình duyệt phụ trợ để có cấu hình trình duyệt tốt nhất và xác định thời điểm nội dung đã được tải đầy đủ cho mục tiêu cạo nhất định

Để biết thêm về kết xuất trình duyệt của ScrapFly và hơn thế nữa, hãy xem tài liệu kết xuất javascript chính thức của chúng tôi

Câu hỏi thường gặp

Chúng ta đã học được rất nhiều điều trong bài viết này, hãy phân tích một số điều đó thành một danh sách các câu hỏi thường gặp ngắn gọn

Lỗi. Geckodriver thực thi cần phải ở trong PATH

Lỗi này thường có nghĩa là geckodriver - công cụ kết xuất của Firefox - chưa được cài đặt trên máy. Bạn có thể xem trang phát hành chính thức để biết hướng dẫn tải xuống
Ngoài ra, chúng tôi có thể sử dụng bất kỳ phiên bản Firefox nào khác bằng cách thay đổi đối số

from selenium import webdriver
driver = webdriver.Chrome[]
driver.get["//www.twitch.tv/directory/game/Art"]
3 trong phần khởi tạo webdriver, e. g.
from selenium import webdriver
driver = webdriver.Chrome[]
driver.get["//www.twitch.tv/directory/game/Art"]
4

Làm cách nào để tắt tải hình ảnh?

Để giảm mức sử dụng băng thông khi cạo bằng Selenium, chúng tôi có thể tắt tải hình ảnh thông qua tùy chọn ưu tiên

$ pip install selenium
$ pip show selenium
Version: 3.141.0
0

Làm cách nào để chụp ảnh màn hình trong Selenium?

Để chụp ảnh màn hình chúng ta có thể sử dụng lệnh webdriver.

from selenium import webdriver
driver = webdriver.Chrome[]
driver.get["//www.twitch.tv/directory/game/Art"]
5 và
from selenium import webdriver
driver = webdriver.Chrome[]
driver.get["//www.twitch.tv/directory/game/Art"]
6. Ảnh chụp màn hình rất hữu ích để gỡ lỗi quy trình làm việc của trình duyệt không đầu

Làm cách nào để nhập các phím bàn phím cụ thể trong Selenium?

Để gửi các phím bàn phím không phải ký tự, chúng ta có thể sử dụng các hằng số được xác định trong hằng số

from selenium import webdriver
driver = webdriver.Chrome[]
driver.get["//www.twitch.tv/directory/game/Art"]
7. Ví dụ:
from selenium import webdriver
driver = webdriver.Chrome[]
driver.get["//www.twitch.tv/directory/game/Art"]
8 sẽ gửi phím enter

Làm cách nào để chọn giá trị thả xuống trong Selenium?

Để chọn các giá trị thả xuống, chúng ta có thể tận dụng các tiện ích UI của Selenium. Đối tượng

from selenium import webdriver
driver = webdriver.Chrome[]
driver.get["//www.twitch.tv/directory/game/Art"]
9 cho phép chúng tôi chọn các giá trị và thực hiện các hành động khác nhau

$ pip install selenium
$ pip show selenium
Version: 3.141.0
1

Làm cách nào để cuộn trình duyệt Selenium đến một đối tượng cụ thể?

Cách tốt nhất để cuộn qua các trang động một cách đáng tin cậy là sử dụng thực thi mã javascript. Ví dụ: để cuộn đến mục sản phẩm cuối cùng, chúng tôi sẽ sử dụng hàm javascript

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
...

# configure webdriver
options = Options[]
options.headless = True  # hide GUI
options.add_argument["--window-size=1920,1080"]  # set window size to native GUI size
options.add_argument["start-maximized"]  # ensure window is full-screen

...
driver = webdriver.Chrome[options=options]
#                         ^^^^^^^^^^^^^^^
driver.get["//www.twitch.tv/directory/game/Art"]
0

$ pip install selenium
$ pip show selenium
Version: 3.141.0
2

Làm cách nào để nắm bắt các yêu cầu HTTP trong Selenium?

Khi trình duyệt web kết nối với một trang web, nó sẽ thực hiện nhiều yêu cầu HTTP từ chính tài liệu đến yêu cầu hình ảnh và dữ liệu. Đối với gói python dây selen này có thể được sử dụng để mở rộng Selenium với khả năng chụp yêu cầu/phản hồi

$ pip install selenium
$ pip show selenium
Version: 3.141.0
3

Selenium có thể được sử dụng với Scrapy không?

Scrapy là một khung quét web phổ biến trong Python, tuy nhiên do các kiến ​​trúc khác nhau khiến cho phế liệu và Selenium hoạt động cùng nhau rất khó khăn. Kiểm tra các nỗ lực mã nguồn mở này scrapy-selenium và scrapy-headless

Tóm tắt và đọc thêm

Trong hướng dẫn Python với Selenium ngắn này, chúng ta đã xem xét cách chúng ta có thể sử dụng gói tự động hóa trình duyệt web này để quét web.
Chúng tôi đã xem xét hầu hết các chức năng phổ biến được sử dụng trong quá trình thu thập dữ liệu, chẳng hạn như điều hướng, nhấp vào nút, nhập văn bản, chờ nội dung và thực thi javascript tùy chỉnh.
Chúng tôi cũng đã xem xét một số thành ngữ phổ biến về hiệu suất, chẳng hạn như duyệt không đầu và tắt tính năng tải hình ảnh.

Kiến thức này sẽ giúp bạn bắt đầu với Selenium web scraping. Hơn nữa, chúng tôi khuyên bạn nên xem xét việc tránh bị bot phát hiện.

Làm cách nào để cạo các trang web JavaScript bằng Python?

Trong hướng dẫn này, chúng ta sẽ thảo luận về cách loại bỏ các trang web được hiển thị JavaScript bằng Python. .
Cài đặt Selenium và Trình quản lý WebDriver
Kết nối với URL mục tiêu
Cạo dữ liệu liên quan bằng cách sử dụng bộ chọn CSS hoặc phương pháp khác mà Selenium hỗ trợ
Lưu và xuất dữ liệu dưới dạng tệp CSV để sử dụng sau

Tôi có nên sử dụng JavaScript hoặc Python để quét web không?

Python là lựa chọn tốt nhất cho bạn . Các thư viện như yêu cầu hoặc HTTPX giúp dễ dàng loại bỏ các trang web không yêu cầu JavaScript hoạt động chính xác. Python cung cấp rất nhiều ứng dụng khách HTTP dễ sử dụng. Và một khi bạn nhận được phản hồi, bạn cũng rất dễ dàng phân tích cú pháp HTML bằng BeautifulSoup chẳng hạn.

Bạn có thể sử dụng JavaScript để quét web không?

Dò web bằng JavaScript là một kỹ thuật rất hữu ích để trích xuất dữ liệu từ Internet để trình bày hoặc phân tích .

Làm cách nào để quét web một trang web JavaScript?

Các bước cần thiết để quét web .
Tạo gói. tập tin json
Cài đặt & Gọi các thư viện cần thiết
Chọn Trang web & Dữ liệu cần Cạo
Đặt URL và kiểm tra mã phản hồi
Kiểm tra và tìm các thẻ HTML thích hợp
Bao gồm các thẻ HTML trong Mã của chúng tôi
Kiểm tra chéo dữ liệu đã cạo

Chủ Đề