HomeLập trìnhPythonCách cạo trang...

Cách cạo trang web bằng Python


của Devanshu Jain

Đó là thời điểm trong năm khi không khí tràn ngập tiếng vỗ tay và cổ vũ của các vận động viên hạng 4 và hạng 6 trong giải đấu Indian Premier League Cricket T20, sau đó là ICC Cricket World Cup ở Anh. Và làm sao chúng ta có thể quên kết quả bầu cử của quốc gia dân chủ lớn nhất thế giới, Ấn Độ, sẽ được công bố trong vài tuần tới?

Để luôn cập nhật về việc ai sẽ giành được danh hiệu IPL năm nay hoặc quốc gia nào sẽ giành được ICC World Cup vào năm 2019 hoặc tương lai của đất nước sẽ như thế nào trong 5 năm tới, chúng ta cần phải liên tục dán mắt vào Internet.

Nhưng nếu bạn giống tôi và không thể dành nhiều thời gian trên Internet, nhưng rất muốn cập nhật tất cả các tựa sách này, thì bài viết này là dành cho bạn. Vì vậy, không lãng phí thời gian, hãy bắt đầu!

dySuWsAk2qARPtM0cOs88-YztYwzc1fWPz1F
Ảnh của Balázs Kétyi trên Bapt

Có hai cách để chúng tôi có thể truy cập thông tin cập nhật. Một cách là thông qua các API được cung cấp bởi các trang web truyền thông này và cách khác là thông qua Web/Nội dung Scraping.

Cách API quá đơn giản và có lẽ cách tốt nhất để nhận thông tin cập nhật là gọi giao diện lập trình được liên kết. Nhưng thật đáng buồn, không phải tất cả các trang web đều cung cấp API có thể truy cập công khai. Vì vậy, cách còn lại dành cho chúng tôi là Web Scrape.

Rút trích nội dung trang web

Quét web là một kỹ thuật để trích xuất thông tin từ các trang web. Kỹ thuật này chủ yếu tập trung vào việc chuyển đổi dữ liệu phi cấu trúc (định dạng HTML) trên web thành dữ liệu có cấu trúc (cơ sở dữ liệu hoặc bảng tính). Quét web có thể liên quan đến việc truy cập web trực tiếp bằng HTTP hoặc thông qua trình duyệt web.

Đọc thêm  Tìm hiểu về Python Microservices bằng cách xây dựng ứng dụng bằng Django, Flask và React

Trong bài viết này, chúng ta sẽ sử dụng Python để tạo một bot để thu thập nội dung từ các trang web.

quy trình công việc

  • Lấy URL của trang mà chúng tôi muốn trích xuất/xóa dữ liệu
  • Sao chép/tải xuống nội dung HTML của trang
  • Phân tích nội dung HTML và lấy dữ liệu cần thiết

Quy trình trên giúp chúng tôi điều hướng đến URL của trang được yêu cầu, nhận nội dung HTML của trang đó và phân tích cú pháp dữ liệu được yêu cầu. Nhưng đôi khi có những trường hợp, trước tiên chúng ta phải đăng nhập vào trang web và sau đó điều hướng đến một vị trí cụ thể để lấy dữ liệu cần thiết. Trong trường hợp đó, thêm một bước đăng nhập vào trang web.

gói

Để phân tích cú pháp nội dung HTML và nhận dữ liệu cần thiết, chúng tôi sử dụng súp đẹp thư viện. Đó là một gói Python tuyệt vời để phân tích các tài liệu HTML và XML. Hãy kiểm tra nó ra ở đây.

Để đăng nhập vào trang web, điều hướng đến URL được yêu cầu trong cùng một phiên và tải xuống nội dung HTML, chúng tôi sẽ sử dụng selen thư viện. Selenium Python giúp nhấp vào nút, nhập nội dung vào cấu trúc và hơn thế nữa.

Lặn ngay vào mã

Trước tiên, chúng tôi đang nhập tất cả các thư viện mà chúng tôi sẽ sử dụng.

# importing librariesfrom selenium import webdriverfrom bs4 import BeautifulSoup

Tiếp theo, chúng tôi cần cung cấp cho trình điều khiển của trình duyệt đường dẫn đến Selenium để khởi chạy trình duyệt web của chúng tôi (Google Chrome). Và nếu chúng tôi không muốn bot của mình hiển thị GUI của trình duyệt, thì chúng tôi có thể thêm không đầu tùy chọn cho Selenium. Trình duyệt không đầu cung cấp khả năng kiểm soát tự động trang web trong môi trường tương tự như các trình duyệt web phổ biến, nhưng được thực thi thông qua giao diện dòng lệnh hoặc sử dụng giao tiếp mạng.

# chrome driver pathchromedriver="/usr/local/bin/chromedriver"options = webdriver.ChromeOptions()options.add_argument('headless')  # for opening headless browser
browser = webdriver.Chrome(executable_path=chromedriver, chrome_options=options)

Sau khi môi trường đã được thiết lập bằng cách xác định trình duyệt và cài đặt thư viện, chúng ta sẽ bắt tay vào HTML. Điều hướng đến trang đăng nhập và tìm email, mật khẩu và id trường, lớp hoặc tên của nút gửi để nhập nội dung của chúng tôi vào cấu trúc trang.

# Navigating to the login pagebrowser.get('http://playsports365.com/default.aspx')
#Finding the tags by nameemail = browser.find_element_by_name('ctl00$MainContent$ctlLogin$_UserName')
password = browser.find_element_by_name('ctl00$MainContent$ctlLogin$_Password')
login = browser.find_element_by_name('ctl00$MainContent$ctlLogin$BtnSubmit')

Tiếp theo, chúng tôi sẽ gửi thông tin đăng nhập vào các thẻ HTML này bằng cách nhấp vào nút gửi để nhập nội dung của chúng tôi vào cấu trúc trang.

# appending login credentialsemail.send_keys('********')password.send_keys('*******')
# clicking submit buttonlogin.click()

Sau khi đăng nhập thành công, hãy điều hướng đến trang được yêu cầu và lấy nội dung HTML của trang

# After successful login, navigating to Open Bets Pagebrowser.get('http://playsports365.com/wager/OpenBets.aspx')
# Getting HTML content and parsing itrequiredHtml = browser.page_source

Bây giờ, chúng tôi đã nhận được nội dung HTML và điều duy nhất còn lại là phân tích cú pháp nội dung này. Chúng tôi sẽ phân tích cú pháp nội dung bằng thư viện Beautiful Soup và html5lib. html5lib là gói Python triển khai thuật toán phân tích cú pháp HTML5 chịu ảnh hưởng nặng nề của các trình duyệt hiện tại. Ngay sau khi chúng tôi nhận được cấu trúc chuẩn hóa của nội dung được phân tích cú pháp, chúng tôi có thể tìm thấy dữ liệu của mình có trong bất kỳ thẻ con nào của thẻ HTML. Dữ liệu của chúng tôi có trong thẻ bảng và đó là lý do tại sao chúng tôi đang tìm kiếm thẻ đó.

soup = BeautifulSoup(requiredHtml, 'html5lib')table = soup.findChildren('table')my_table = table[0]

Khi chúng tôi tìm thấy thẻ cha, chúng tôi chỉ cần duyệt qua đệ quy trong các phần tử con của nó và in các giá trị.

# fetching tags and printing valuesrows = my_table.findChildren(['th', 'tr'])for row in rows:    cells = row.findChildren('td')    for cell in cells:        value = cell.text        print (value)

Để thực thi chương trình trên, hãy cài đặt các thư viện Selenium, Beautiful Soup và html5lib bằng cách sử dụng pip. Sau khi cài đặt các thư viện, gõ #python <program name> sẽ in các giá trị ra bàn điều khiển.

Đọc thêm  Else-If trong Python – Cú pháp ví dụ câu lệnh Python If

Bằng cách này, chúng tôi có thể cạo và tìm dữ liệu từ bất kỳ trang web nào.

Bây giờ, nếu chúng tôi đang tìm kiếm một trang web thay đổi nội dung rất thường xuyên, chẳng hạn như tỷ số cricket hoặc kết quả bầu cử trực tiếp, chúng tôi có thể chạy chương trình này trong một công việc định kỳ và đặt khoảng thời gian cho công việc định kỳ.

Ngoài ra, chúng ta cũng có thể hiển thị kết quả ngay trên màn hình thay vì bảng điều khiển bằng cách in kết quả trong tab thông báo bật lên trên màn hình sau một khoảng thời gian cụ thể. Chúng tôi thậm chí có thể chia sẻ những giá trị này trên ứng dụng khách nhắn tin. Python có các thư viện phong phú có thể giúp chúng ta tất cả những điều đó.

Nếu bạn muốn tôi giải thích cách thiết lập công việc định kỳ và nhận thông báo xuất hiện trên màn hình nền, vui lòng hỏi tôi trong phần bình luận.

Cho đến lần sau, tạm biệt và tôi hy vọng bạn thích bài viết.



Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status