2016-05-13 20 views
5

Tôi đang sử dụng cào.Làm cách nào để xóa tất cả nội dung khỏi trang web cuộn vô hạn? scrapy

Trang web tôi đang sử dụng có cuộn vô hạn.

trang web có vô số bài đăng nhưng tôi chỉ bị xóa 13.

Làm cách nào để loại bỏ phần còn lại của bài đăng?

đây là mã của tôi:

class exampleSpider(scrapy.Spider): 
name = "example" 
#from_date = datetime.date.today() - datetime.timedelta(6*365/12) 
allowed_domains = ["example.com"] 
start_urls = [ 
    "http://www.example.com/somethinghere/" 
] 

def parse(self, response): 
    for href in response.xpath("//*[@id='page-wrap']/div/div/div/section[2]/div/div/div/div[3]/ul/li/div/h1/a/@href"): 
    url = response.urljoin(href.extract()) 
    yield scrapy.Request(url, callback=self.parse_dir_contents) 


def parse_dir_contents(self, response): 
    #scrape contents code here 

Trả lời

1
+0

tôi đã thử đặt giới hạn độ sâu trong cài đặt của mình nhưng vẫn không thể đăng nhập .. nó bị kẹt khi nhận tất cả các liên kết này: "www.example.com/blog/2016/05/13" nhưng không nhấp vào liên kết và cạo bên trong .. – Michimcchicken

+0

Xin lỗi tôi không thể hiểu nơi nó bị mắc kẹt. Bạn có thể xem một số ví dụ trực tuyến như https://github.com/scrapy/dirbot/blob/master/dirbot/spiders/dmoz.py – WannaBeCoder

+0

bạn có thể xem bản chỉnh sửa cuối cùng của mình không? tôi tự hỏi nếu nó giúp D: – Michimcchicken

1

tôi nghĩ rằng những gì bạn đang tìm kiếm là một logic pagination cùng bên cạnh logic bình thường của bạn

Trong hầu hết các trường hợp .. cuộn vô hạn == phân trang, trên trang đó khi bạn cuộn xuống 3/4 trang hoặc đến cuối trang, trang kích hoạt cuộc gọi AJAX và tải xuống nội dung trang tiếp theo và tải phản hồi vào hiện tại trang

tôi sẽ khuyên bạn sử dụng công cụ network monitor trong firefox và nhận thấy bất kỳ yêu cầu trang như vậy khi bạn cuộn xuống

- đầu mối: bạn sẽ sử dụng scrapy.FormRequest hay scrapy.FormRequest.from_response trong khi thực hiện giải pháp này

1

Rõ ràng, trang đích đó tải lên nội dung của nó động. Do đó có hai giải pháp phù hợp có:

  1. Decrypt jQuery tương tác trong sự tinh tế và cố gắng mô phỏng trao đổi dữ liệu với máy chủ manually

  2. Sử dụng một công cụ cho công việc đặc biệt này. Ví dụ: spynner dường như là một lựa chọn đúng để chú ý.

1

tôi sử dụng Selenium hơn scrapy nhưng bạn phải có khả năng thực hiện tương đương và những gì tôi làm là chạy một số JavaScript trên tải file, cụ thể là:

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

Và tôi nhô giữ làm điều đó cho đến khi nó sẽ không cuộn nữa. Nó không đẹp và không thể được sử dụng trong sản xuất nhưng hiệu quả cho các công việc cụ thể.

+0

Cho dù sử dụng 'Scrapy' cũng sẽ chạy JavaScript? –

1

Kiểm tra mã trang web.

Nếu cuộn vô hạn được tự động kích hoạt hành động js, bạn có thể tiến hành như sau sử dụng đề nghị Alioth: spynner

Tiếp theo spynner docs, bạn có thể thấy rằng có thể kích hoạt sự kiện jquery.

Tra cứu mã thư viện để xem loại sự kiện bạn có thể kích hoạt.

Cố gắng tạo ra một cuộn xuống dưới kiện hoặc tạo css thay đổi sở hữu trên bất kỳ của các div bên trong nội dung cuộn trong trang web. Sau spynner docs, một cái gì đó như:

browser = spynner.Browser(debug_level=spynner.DEBUG, debug_stream=debug_stream) 
# load here your website as spynner allows 
browser.load_jquery(True) 
ret = run_debug(browser.runjs,'window.scrollTo(0, document.body.scrollHeight);console.log(''scrolling...);') 
# continue parsing ret 

Nó không phải là khá có thể xảy ra rằng một cuộn vô hạn được kích hoạt bởi một liên kết anchor, nhưng có lẽ có thể được kích hoạt bởi một hành động jquery, không necesarry gắn vào một liên kết. Đối với điều này đang trường hợp sử dụng như sau:

br.load('http://pypi.python.org/pypi') 

anchors = br.webframe.findAllElements('#menu ul.level-two a') 
# chooses an anchor with Browse word as key 
anchor = [a for a in anchors if 'Browse' in a.toPlainText()][0] 
br.wk_click_element_link(anchor, timeout=10) 
output = br.show() 
# save output in file: output.html or 
# plug this actions into your scrapy method and parse output var as you do 
# with response body 

Sau đó, chạy scrapy vào file output.html hoặc, nếu bạn thực hiện nó như vậy, sử dụng biến bộ nhớ địa phương mà bạn chọn lựa để lưu trữ html sửa đổi sau khi hành động js .

Như một giải pháp khác, trang web bạn đang cố gắng để phân tích có thể có một thay thế làm phiên bản trong trường hợp trình duyệt truy cập có không js kích hoạt.

Cố gắng hiển thị trang web bằng trình duyệt bị tắt javascript và có thể theo cách đó, trang web cung cấp liên kết cố định ở cuối phần nội dung.

Cũng có thành công triển khai điều hướng trình thu thập thông tin js bằng cách sử dụng phương pháp tiếp cận với Scrapy cùng với Selenium được nêu chi tiết trong this để trả lời.

+1

Cảm ơn bạn đã có câu trả lời hoàn hảo. ♥ –

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