2010-01-27 9 views
16

Tôi cần phải cạo một trang web bằng python. Tôi có được mã nguồn html với mô-đun urlib, nhưng tôi cũng cần phải cạo một số mã html được tạo ra bởi một hàm javascript (được bao gồm trong nguồn html). Những gì chức năng này không "trong" trang web là khi bạn nhấn một nút nó kết quả đầu ra một số mã html. Làm thế nào tôi có thể "bấm" nút này với mã python? Có thể giúp đỡ tôi không? Tôi đã chụp yêu cầu POST bằng firebug nhưng khi tôi cố gắng chuyển nó lên url, tôi nhận được lỗi 403. Bất kỳ đề xuất?xoá html được tạo bởi javascript với python

+2

Đào địa chỉ bị xáo trộn ra khỏi trang web để tìm danh sách thư? –

+0

Tôi đã trả lời một câu hỏi tương tự về [Nhấp vào liên kết javascript trong python?] (Http://stackoverflow.com/questions/5207948/click-on-a-javascript-link-within-python/5227031#5227031) –

Trả lời

10

Trong Python, tôi nghĩ rằng Selenium 1.0 là cách để thực hiện. Đó là thư viện cho phép bạn điều khiển trình duyệt web thực sự từ ngôn ngữ bạn chọn.

Bạn cần phải có trình duyệt web được đề cập được cài đặt trên máy mà tập lệnh của bạn chạy, nhưng có vẻ như cách đáng tin cậy nhất để kiểm tra trang web có lập trình sử dụng nhiều JavaScript.

+0

có cách nào để làm điều đó với yêu cầu và món súp tuyệt đẹp không? Tôi đã sử dụng các yêu cầu và nó hoạt động tốt trong mọi trường hợp khác nhưng điều này. Xin vui lòng cho tôi biết nếu yêu cầu cũng có thể giải quyết điều này. – Shaardool

+0

@Shaardool: giải quyết những gì? Dạo HTML được tạo ra trong trình duyệt bằng JavaScript? Không - cho rằng bạn cần một cái gì đó chạy JavaScript để nó có thể tạo ra HTML. Beautiful Soup không chạy JavaScript. –

+0

cảm ơn vì thông tin chi tiết, thư viện Yêu cầu có thể làm điều đó không?Nó hoạt động tốt với các yêu cầu AJAX tới máy chủ, nhưng tôi muốn biết liệu nó có thể làm việc với javascript cũng tạo ra HTML hay không. Tuy nhiên, tôi không tìm thấy bất kỳ thứ gì trong tài liệu của họ. – Shaardool

4

Tôi đã phải làm điều này trước (trong .NET) và về cơ bản bạn sẽ phải lưu trữ một trình duyệt, làm cho nó nhấp vào nút, và thẩm vấn DOM (mô hình đối tượng tài liệu) của trình duyệt để tại HTML được tạo.

Đây chắc chắn là một trong những nhược điểm đối với các ứng dụng web di chuyển theo hướng tiếp cận Ajax/Javascript để tạo ra phía máy khách HTML.

2

Đối với Scrapy (khung công cụ cạo trăn lớn) có scrapyjs: trình xử lý tải xuống bổ sung/trình xử lý trung gian có thể cắt nội dung được tạo javascript.

Nó dựa trên công cụ webkit bởi pygtk, python-webkit và python-jswebkit và nó khá đơn giản.

6

Vì không có câu trả lời toàn diện ở đây, tôi sẽ tiếp tục và viết một câu trả lời.

Để cạo bỏ JS trang trả lại, chúng tôi sẽ cần một trình duyệt có một công cụ JavaScript (ei, hỗ trợ Javascript rendering)

Tùy chọn như mechanize, url2lib sẽ không làm việc kể từ khi họ KHÔNG hỗ trợ JavaScript.

Vì vậy, đây là những gì bạn cần làm:

Cài đặt PhantomJS để chạy với Selenium. Sau khi cài đặt các phụ thuộc cho cả hai người trong số họ (tham khảo this), bạn có thể sử dụng mã sau làm ví dụ để tìm nạp trang web được hiển thị đầy đủ.

from selenium import webdriver 

driver = webdriver.PhantomJS() 
driver.get('http://jokes.cc.com/') 
soupFromJokesCC = BeautifulSoup(driver.page_source) #page_source fetches page after rendering is complete 
driver.save_screenshot('screen.png') # save a screenshot to disk 

driver.quit()