Hướng dẫn how do you web scrape a dynamic web using python? - làm cách nào để bạn tìm kiếm web động bằng cách sử dụng python?


Trong chương này, chúng ta hãy tìm hiểu cách thực hiện quét web trên các trang web động và các khái niệm liên quan đến chi tiết.

Giới thiệu

Quét web là một nhiệm vụ phức tạp và độ phức tạp nhân lên nếu trang web năng động. Theo kiểm toán toàn cầu của Liên hợp quốc về khả năng truy cập web, hơn 70% các trang web có bản chất năng động và họ dựa vào JavaScript cho các chức năng của họ.

Ví dụ trang web năng động

Chúng ta hãy xem xét một ví dụ về một trang web năng động và biết về lý do tại sao rất khó để cạo. Ở đây chúng tôi sẽ lấy ví dụ về việc tìm kiếm từ một trang web có tên http://example.webscraping.com/places/default/search. Nhưng làm thế nào chúng ta có thể nói rằng trang web này có tính chất năng động? Nó có thể được đánh giá từ đầu ra của tập lệnh Python sau đây sẽ cố gắng xóa dữ liệu từ trang web đã đề cập ở trên -

import re
import urllib.request
response = urllib.request.urlopen('http://example.webscraping.com/places/default/search')
html = response.read()
text = html.decode()
re.findall('(.*?)',text)

Đầu ra

[ ]

Đầu ra trên cho thấy rằng Scraper ví dụ không thể trích xuất thông tin vì phần tử chúng ta đang cố gắng tìm thấy trống.

Phương pháp tiếp cận dữ liệu từ các trang web động

Chúng tôi đã thấy rằng cái cào không thể xóa thông tin từ một trang web động vì dữ liệu được tải động với JavaScript. Trong những trường hợp như vậy, chúng ta có thể sử dụng hai kỹ thuật sau đây để lấy dữ liệu từ các trang web phụ thuộc JavaScript động -

  • Kỹ thuật đảo ngược JavaScript
  • Kết xuất JavaScript

Kỹ thuật đảo ngược JavaScript

Kết xuất JavaScript

Quá trình được gọi là Kỹ thuật đảo ngược sẽ hữu ích và cho phép chúng tôi hiểu cách dữ liệu được tải động bởi các trang web.inspect element tab for a specified URL. Next, we will click NETWORK tab to find all the requests made for that web page including search.json with a path of /ajax. Instead of accessing AJAX data from browser or via NETWORK tab, we can do it with the help of following Python script too −

import requests
url=requests.get('http://example.webscraping.com/ajax/search.json?page=0&page_size=10&search_term=a')
url.json() 

Để làm điều này, chúng tôi cần nhấp vào tab phần tử kiểm tra cho một URL được chỉ định. Tiếp theo, chúng tôi sẽ nhấp vào tab mạng để tìm tất cả các yêu cầu được thực hiện cho trang web đó bao gồm search.json với đường dẫn /ajax. Thay vì truy cập dữ liệu AJAX từ trình duyệt hoặc qua tab mạng, chúng ta có thể thực hiện điều đó với sự trợ giúp của việc theo dõi tập lệnh Python quá -

Thí dụ

import requests
import string
PAGE_SIZE = 15
url = 'http://example.webscraping.com/ajax/' + 'search.json?page={}&page_size={}&search_term=a'
countries = set()
for letter in string.ascii_lowercase:
   print('Searching with %s' % letter)
   page = 0
   while True:
   response = requests.get(url.format(page, PAGE_SIZE, letter))
   data = response.json()
   print('adding %d records from the page %d' %(len(data.get('records')),page))
   for record in data.get('records'):countries.add(record['country'])
   page += 1
   if page >= data['num_pages']:
      break
   with open('countries.txt', 'w') as countries_file:
   countries_file.write('n'.join(sorted(countries))) 

Tập lệnh trên cho phép chúng tôi truy cập phản hồi JSON bằng cách sử dụng phương thức Python JSON. Tương tự, chúng ta có thể tải xuống Phản hồi chuỗi RAW và bằng cách sử dụng phương thức Python JSON JSON.LOADS, chúng ta cũng có thể tải nó. Chúng tôi đang làm điều này với sự giúp đỡ của Kịch bản Python. Về cơ bản, nó sẽ cạo tất cả các quốc gia bằng cách tìm kiếm chữ cái của bảng chữ cái ‘A, và sau đó lặp lại các trang kết quả của các phản hồi JSON.

Đầu ra

Searching with a
adding 15 records from the page 0
adding 15 records from the page 1
...

Kết xuất JavaScript

Quá trình được gọi là Kỹ thuật đảo ngược sẽ hữu ích và cho phép chúng tôi hiểu cách dữ liệu được tải động bởi các trang web.

  • Để làm điều này, chúng tôi cần nhấp vào tab phần tử kiểm tra cho một URL được chỉ định. Tiếp theo, chúng tôi sẽ nhấp vào tab mạng để tìm tất cả các yêu cầu được thực hiện cho trang web đó bao gồm search.json với đường dẫn /ajax. Thay vì truy cập dữ liệu AJAX từ trình duyệt hoặc qua tab mạng, chúng ta có thể thực hiện điều đó với sự trợ giúp của việc theo dõi tập lệnh Python quá -

  • Thí dụReact.js can make reverse engineering difficult by abstracting already complex JavaScript logic.

Tập lệnh trên cho phép chúng tôi truy cập phản hồi JSON bằng cách sử dụng phương thức Python JSON. Tương tự, chúng ta có thể tải xuống Phản hồi chuỗi RAW và bằng cách sử dụng phương thức Python JSON JSON.LOADS, chúng ta cũng có thể tải nó. Chúng tôi đang làm điều này với sự giúp đỡ của Kịch bản Python. Về cơ bản, nó sẽ cạo tất cả các quốc gia bằng cách tìm kiếm chữ cái của bảng chữ cái ‘A, và sau đó lặp lại các trang kết quả của các phản hồi JSON.

Để làm điều này, chúng tôi cần nhấp vào tab phần tử kiểm tra cho một URL được chỉ định. Tiếp theo, chúng tôi sẽ nhấp vào tab mạng để tìm tất cả các yêu cầu được thực hiện cho trang web đó bao gồm search.json với đường dẫn /ajax. Thay vì truy cập dữ liệu AJAX từ trình duyệt hoặc qua tab mạng, chúng ta có thể thực hiện điều đó với sự trợ giúp của việc theo dõi tập lệnh Python quá -

Thí dụ

Tập lệnh trên cho phép chúng tôi truy cập phản hồi JSON bằng cách sử dụng phương thức Python JSON. Tương tự, chúng ta có thể tải xuống Phản hồi chuỗi RAW và bằng cách sử dụng phương thức Python JSON JSON.LOADS, chúng ta cũng có thể tải nó. Chúng tôi đang làm điều này với sự giúp đỡ của Kịch bản Python. Về cơ bản, nó sẽ cạo tất cả các quốc gia bằng cách tìm kiếm chữ cái của bảng chữ cái ‘A, và sau đó lặp lại các trang kết quả của các phản hồi JSON.

from selenium import webdriver

Sau khi chạy tập lệnh trên, chúng tôi sẽ nhận được đầu ra sau và các bản ghi sẽ được lưu trong tệp có tên quốc gia.txt.

path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'
driver = webdriver.Chrome(executable_path = path)

Trong phần trước, chúng tôi đã đảo ngược kỹ thuật trên trang web rằng API hoạt động như thế nào và cách chúng tôi có thể sử dụng nó để truy xuất kết quả trong một yêu cầu duy nhất. Tuy nhiên, chúng ta có thể gặp phải những khó khăn sau khi thực hiện kỹ thuật đảo ngược -

driver.get('http://example.webscraping.com/search')

Đôi khi các trang web có thể rất khó khăn. Ví dụ: nếu trang web được tạo bằng công cụ trình duyệt nâng cao như Google Web Toolkit (GWT), thì mã JS kết quả sẽ được tạo ra và khó hiểu và kỹ sư đảo ngược.

driver.find_element_by_id('search_term').send_keys('.')

Một số khung cấp cao hơn như React.js có thể làm cho kỹ thuật đảo ngược trở nên khó khăn bằng cách trừu tượng hóa logic JavaScript đã phức tạp.

js = "document.getElementById('page_size').options[1].text = '100';"
driver.execute_script(js)

Giải pháp cho những khó khăn trên là sử dụng công cụ kết xuất trình duyệt phân tích HTML, áp dụng định dạng CSS và thực thi JavaScript để hiển thị trang web.

[ ]
0

Trong ví dụ này, để hiển thị tập lệnh Java, chúng tôi sẽ sử dụng một mô -đun Python quen thuộc. Mã Python sau đây sẽ hiển thị một trang web với sự trợ giúp của selen -

[ ]
1

Đầu tiên, chúng ta cần nhập webdriver từ selen như sau -

[ ]
2

Bây giờ, cung cấp đường dẫn của trình điều khiển web mà chúng tôi đã tải xuống theo yêu cầu của chúng tôi -

[ ]
3

Làm thế nào để bạn cạo một trang web năng động?

Có hai cách tiếp cận để cạo một trang web động: Xóa nội dung trực tiếp từ JavaScript. Quét trang web khi chúng tôi xem nó trong trình duyệt của chúng tôi - sử dụng các gói Python có khả năng thực hiện JavaScript.Scrape the content directly from the JavaScript. Scrape the website as we view it in our browser — using Python packages capable of executing the JavaScript.

Làm thế nào để bạn cạo một bảng động trong Python?

Cạo các bảng động trong Python với các yêu cầu..
Tìm API ẩn để truy cập dữ liệu JSON.Chúng tôi đã biết bảng trên trang này được tạo động.....
Gửi yêu cầu HTTP ban đầu của chúng tôi.....
Đọc và cạo dữ liệu JSON.....
Xuất dữ liệu của chúng tôi vào một tệp CSV.....
Chạy tập lệnh của chúng tôi [Mã đầy đủ].

Mô -đun Python nào là tốt nhất cho các trang động của Web Scraping?

Để loại bỏ nội dung từ một trang tĩnh, chúng tôi sử dụng đẹp như gói của chúng tôi để cạo và nó hoạt động hoàn hảo cho các trang tĩnh.Chúng tôi sử dụng các yêu cầu để tải trang vào tập lệnh Python của chúng tôi.

Chúng ta có thể tạo trang web năng động bằng Python không?

Tạo các trang web động bằng CGI và tạo thư viện các trang HTML một phần để sử dụng trong nhiệm vụ này.Xây dựng các trang web động bằng SSI và các chương trình Python phụ trợ để tăng cường chức năng SSI.Build dynamic web pages using SSI and auxiliary Python programs to enhance the SSI functionality.