2013-05-06 101 views
5

Tôi đang cạo một trang web sử dụng Scrapy yêu cầu phải bật chế độ nấu ăn và tập lệnh java. Tôi không nghĩ rằng tôi sẽ phải thực sự xử lý javascript. Tất cả những gì tôi cần là giả vờ như javascript được kích hoạt.Làm thế nào để gửi JavaScript và Cookies được kích hoạt trong Scrapy?

Dưới đây là những gì tôi đã cố gắng: 1) Bật Cookie qua sau trong cài đặt

COOKIES_ENABLED = True 
COOKIES_DEBUG = True 

2) Sử dụng tải middleware cho cookie

DOWNLOADER_MIDDLEWARES = { 
    'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 400, 
    'scrapy.contrib.downloadermiddleware.cookies.CookiesMiddleware':700 
} 

3) Gửi 'X-hỗ trợ JavaScript ':' Đúng '

DEFAULT_REQUEST_HEADERS={ 
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
    'Accept-Language': 'en', 
    'X-JAVASCRIPT-ENABLED': 'True' 
} 

nhưng không ai trong số họ đang làm việc với tôi. Bạn có thể đề nghị bất kỳ ý tưởng hoặc cho tôi một số hướng?

Cảm ơn bạn trước đã trả lời.

Trả lời

1

Phế liệu không hỗ trợ tập lệnh java.

nhưng

bạn có thể sử dụng một số thư viện khác với Scrapy để thực hiện JS, như Webkit, Selenium vv,

và bạn không cần phải bật cookies (COOKIES_ENABLED = True), thậm chí không cần thiết để thêm DOWNLOADER_MIDDLEWARES trong số settings.py của bạn vì chúng đã có sẵn trong default scrapy settings

+0

Akhter, Cảm ơn bạn đã trả lời. Như tôi đã nói, tôi sẽ không cần xử lý JavaScript. Máy chủ sẽ không cung cấp cho tôi trang thực nếu hạt giống javascript không được bật trên nguồn yêu cầu. Tôi chỉ cần gửi tín hiệu đến máy chủ mà javascript và cookie được bật. –

4

AFAIK, không có giải pháp phổ quát. Bạn phải gỡ lỗi trang web, để xem cách nó xác định rằng Javascript không được hỗ trợ/kích hoạt bởi ứng dụng khách của bạn.

Tôi không nghĩ rằng máy chủ sẽ xem tiêu đề X-JAVASCRIPT-ENABLED. Có thể có cookie được đặt bởi Javascript khi trang tải trong trình duyệt được bật javascript thực? Có thể máy chủ nhìn vào tiêu đề user-agent?

Xem thêm this response.

+0

Vâng, vâng ... Đó có thể là một hướng tốt cho tôi để làm việc trên ... –

4

Bạn nên thử Splash động cơ JS với scrapyjs. Dưới đây là một ví dụ về cách thiết lập nó trong dự án nhện của bạn:

SPLASH_URL = 'http://192.168.59.103:8050' 
DOWNLOADER_MIDDLEWARES = { 
    'scrapyjs.SplashMiddleware': 725, 
} 

Scraping hub đó là cùng một công ty đằng sau Scrapy, có special instances để chạy nhện của bạn với splash kích hoạt.

Sau đó mang lại SplashRequest thay vì Request trong nhện của bạn như thế này:

import scrapy 
from scrapy_splash import SplashRequest 

class MySpider(scrapy.Spider): 
    start_urls = ["http://example.com", "http://example.com/foo"] 

    def start_requests(self): 
     for url in self.start_urls: 
      yield SplashRequest(url, self.parse, 
       endpoint='render.html', 
       args={'wait': 0.5}, 
      ) 

    def parse(self, response): 
     # response.body is a result of render.html call; it 
     # contains HTML processed by a browser. 
     # …