2015-09-29 14 views
8

Có cách nào để lấy nội dung javascript được thực thi từ một trang web không? Tôi đã thử các yêu cầu + BeautifulSoup, cơ giới hóa, điều này mang lại cho tôi "mã nguồn" của trang web chứ không phải javascript được thực thi. Ví dụ: trang web này: - http://listen.tidal.com/loginnhận nội dung javascript được thực thi trong python

Như bạn có thể thấy, trong mã nguồn, có JS không thực thi, nhưng khi bạn kiểm tra phần tử, bạn sẽ thấy mã được thực thi.

Bây giờ, có cách nào tôi có thể nhận được mã EXECUTED đó trong python không? Gợi ý xin vui lòng, bởi vì tôi đã thử mô phỏng một trình duyệt bằng cách sử dụng cơ giới hóa và nó giống như reuqests. Cảm ơn Bạn

+1

Xem [Trình giả lập trình duyệt Python với hỗ trợ JS] (http://stackoverflow.com/questions/21777306/python-browser-emulator-with-js-support). – approxiblue

+1

cũng có giao diện: http://stackoverflow.com/questions/8049520/web-scraping-javascript-page-with-python – mico

+0

http://stackoverflow.com/questions/5793414/mechanize-and-javascript, quá – mico

Trả lời

3

Thực tế, cần có JavaScript engine để thực thi javascript. Python là một ngôn ngữ có trình thông dịch riêng (trình biên dịch!) Để thực thi mã python. Đây là hai công nghệ khác nhau. Vì vậy, nếu bạn muốn thực thi javascript từ python, python phải có api hoặc sắp xếp các ràng buộc tương tác với động cơ thực thi javascript. May mắn thay python có tương tác với một số JS Engine để thực hiện các công việc liên quan đến web (kiểm tra vv). Đây tương thích JS có thể được chia thành hai nhóm như liệt kê dưới đây

  1. Trình duyệt mà không Graphical User Interface (GUI) aka Headless browser: ví dụ: PhantomJS a Webkit hiển thị trình duyệt không dựa trên công cụ hiển thị, SlimerJS a Gecko trình duyệt không dựa trên trình hiển thị động cơ để xem thêm here. Bạn có thể tương thích với PhantomJS với selenium (keo giữa python và PhantomJS) hoặc bạn có thể sử dụng PyQt và sử dụng python để chạy JS như here.
  2. Trình duyệt với Giao diện người dùng đồ họa (GUI): ví dụ: Firefox, Chromium, Safari, v.v. Trong trường hợp này, bạn cũng có thể thực thi JS thông qua selenium python.

đơn giản thực hiện ví dụ về JS trong selen python như liệt kê dưới đây

from selenium import webdriver 
#define driver- firefox, chrome or phantomjs etc. 
driver = webdriver.Firefox() 
#Open the url 
driver.get('https://www.google.com') 
#see how javascript simple alert is being executed 
driver.execute_script("alert('hello world');") 
#close the driver i.e. closing opened Firefox instance! 
driver.close() 
0

Có, bạn phải chọn một công cụ hỗ trợ nội dung Javascript, khác với cơ học. Cơ học chỉ dành cho nội dung tĩnh như bạn đã quan sát. Có một số, được tìm thấy bằng các từ tìm kiếm "python alternative to mechanics". Tôi sẽ thử PhantomJS, nếu tôi phải chọn một.

Cũng có một số khác được tìm thấy trong các câu trả lời khác được liên kết trong nhận xét, chỉ cần tôi để lại những nhận xét này do tránh "SO không chọn công cụ đề xuất trang web yêu thích của bạn" và do đó chỉ giải pháp phổ quát được đề cập . Vì vậy, hãy tìm kiếm một chút;)

1

Chỉ cần để làm nổi bật - Python không thực thi mã Js của bạn, nhưng thời gian chạy không. Dưới đây là ví dụ về mô đun python chọn thời gian chạy có sẵn và đánh giá mã cho bạn.

Look at PyExecJS, tại đây bạn có thể tìm thấy một số ví dụ, nhưng xem xét nó có thể không chứa bất kỳ API trình duyệt nào như DOM, Html5 Api, v.v.

Một câu hỏi lớn khác, lý do để đánh giá mã trong python là gì?

Các vấn đề liên quan