2010-07-29 37 views
13

Tôi đang cố gắng loại bỏ và gửi thông tin đến các trang web phụ thuộc nhiều vào Javascript để thực hiện hầu hết các hành động của nó. Trang web thậm chí sẽ không hoạt động khi tôi tắt Javascript trong trình duyệt của mình.Cạo các trang web đã bật Javascript?

Tôi đã tìm kiếm một số giải pháp trên Google và SO và có người đề xuất tôi nên thiết kế lại Javascript, nhưng tôi không biết làm cách nào để thực hiện điều đó.

Cho đến nay tôi đã sử dụng Cơ chế và hoạt động trên các trang web không yêu cầu Javascript.

Có cách nào để truy cập các trang web sử dụng Javascript bằng cách sử dụng urllib2 hoặc một cái gì đó tương tự không? Tôi cũng sẵn sàng học Javascript, nếu đó là những gì nó cần.

+0

Ngoài sự tò mò, mục đích của bài tập này là gì? Các trang web có phiền rằng bạn tự động gửi dữ liệu đến biểu mẫu của chúng không? –

+0

Điều này về cơ bản là không thể. – katrielalex

+3

Tom, tôi không nghĩ họ quan tâm. Hoặc ít nhất tôi hy vọng họ không. Katrielalex, tôi thực sự nghi ngờ điều đó. – user216171

Trả lời

6

Có lẽ bạn có thể sử dụng Selenium Webdriver, trong đó có cam kết ràng buộc python Tôi tin. Tôi nghĩ rằng nó chủ yếu được sử dụng như một công cụ để kiểm tra các trang web, nhưng tôi đoán nó nên có thể sử dụng cho cạo quá.

+0

1+ Selen là một công cụ tuyệt vời để cạo. (nếu bạn không nhớ nó nặng như thế nào). Mặt duy nhất là bạn sẽ thấy trình duyệt làm những gì bạn muốn. –

+0

Có thể chạy [Selenium headless] (http://stackoverflow.com/questions/7568899/does-selenium-support-headless-browser-testing), mà không có bất kỳ màn hình hiển thị nào. –

+0

@stav Mặc dù có vẻ như không hỗ trợ chính thức để chạy selenium không đầu, bạn có thể sử dụng xvfb, giống như/dev/null và hấp thụ toàn bộ màn hình. Kết quả đầu tiên này trên google sẽ giúp http://www.alittlemadness.com/2008/03/05/running-selenium-headless/ – pranavk

6

Tôi đã có chính xác cùng một vấn đề. Nó không phải là đơn giản cả, nhưng cuối cùng tôi đã tìm thấy một giải pháp tuyệt vời, sử dụng PyQt4.QtWebKit.

Bạn sẽ tìm thấy lời giải thích trên trang web này: http://blog.motane.lu/2009/07/07/downloading-a-pages-content-with-python-and-webkit/

Tôi đã thử nghiệm nó, tôi hiện đang sử dụng nó, và đó là tuyệt vời!

Lợi thế lớn của nó là nó có thể chạy trên máy chủ, chỉ sử dụng X mà không có môi trường đồ họa.

6

Tôi thực sự khuyên bạn nên sử dụng Selenium. Nó chủ yếu được thiết kế để thử nghiệm các ứng dụng Web từ một góc nhìn người dùng, tuy nhiên về cơ bản nó là một trình điều khiển "FireFox" .Tôi đã thực sự sử dụng nó cho mục đích này ... mặc dù tôi đã vẽ một trang web AJAX động. có dễ nhận biết "Anchor Text" Selenium có thể "click" tất cả mọi thứ nên sắp xếp riêng của mình ra.

Hy vọng rằng sẽ giúp

5

Bạn nên xem xét sử dụng Ghost, thư viện Python mà kết thúc tốt đẹp PyQt4 + WebKit hack.

Điều này làm cho g ứng dụng WebKit:

import ghost 
g = ghost.Ghost() 

Bạn có thể lấy một trang với g.open(url) và sau đó g.content sẽ đánh giá tài liệu ở trạng thái hiện tại của tài liệu.

Ghost có các tính năng thú vị khác, như tiêm JS và một số phương thức điền biểu mẫu và bạn có thể chuyển tài liệu kết quả đến BeautifulSoup và v.v. soup = bs4.BeautifulSoup(g.content).

Cho đến nay, Ghost là thứ duy nhất tôi tìm thấy làm cho loại điều này trở nên dễ dàng trong Python. Giới hạn duy nhất tôi gặp phải là bạn không thể dễ dàng tạo nhiều hơn một cá thể của đối tượng khách hàng, ghost.Ghost, nhưng bạn có thể làm việc xung quanh điều đó.

7

tôi đã viết một hướng dẫn nhỏ về chủ đề này, điều này có thể giúp:

http://koaning.io/dynamic-scraping-with-python.html

Về cơ bản những gì bạn làm là bạn có thư viện selen giả vờ rằng nó là một trình duyệt firefox, trình duyệt sẽ đợi cho đến khi tất cả javascript đã được tải trước khi nó tiếp tục truyền cho bạn chuỗi html. Khi bạn có chuỗi này, bạn có thể phân tích cú pháp đó với beautifulsoup.

+0

có thể trình duyệt "cuộn" vì khi người dùng cuộn, nó buộc tải xuống tải nhiều thứ hơn . – CodeGuru

+0

tôi không biết lệnh python. nhưng tôi thấy điều này từ một câu hỏi java; http://stackoverflow.com/questions/9443067/scrolling-using-selenium-webdriver – cantdutchthis

+1

Cảm ơn, hướng dẫn rất hữu ích! – Jessica

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