Очистка веб-страниц с использованием scrapy-spla sh не работает с моим локальным проектом - PullRequest
0 голосов
/ 02 мая 2020

Прежде всего не путайте с 0.0.0.0:8085 (там правильно работает spla sh). Но моя проблема в том, что я разработал приложение PHP на локальном хосте, чтобы проверить утилизацию с помощью scrapy. К сожалению, это не работает. enter image description here

Для справки мой код

КОД ПАУКА

import scrapy
from scrapy_splash import SplashRequest
from scrapy_splash import SplashFormRequest
from scrapy.http import Request, FormRequest
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
# from scrapy.selector import HtmlXPathSelector
from scrapy.http import FormRequest
import scrapy
from scrapy.crawler import CrawlerProcess
from scrapy.utils.response import open_in_browser
class MySpider(scrapy.Spider):
    name = 'loster'
    # start_urls = ["http://talkerscode.com/webtricks/demo/demo_ajax-login-form-using-jquery-php-and-mysql.php",]
    start_urls =["http://localhost/sample_proj/login_form.php"]
    lua_script = """
    function main(splash, args)
    -- find a form and submit "splash" to it
    local function search_for_splash()
        local forms = splash:select('form')
        local inputs = forms.node:querySelectorAll('input:not([type="hidden"])')
        local search_input = splash:select('#email')  
        search_input:send_text('arjunphp@gmail.com')
        local search_input2 = splash:select('#password')
        search_input2:send_text('12345')
        local login_button = splash:select('#login')
        login_button:mouse_click()
    end

    -- main rendering script
    assert(splash:go(args.url))
    assert(splash:wait(1))
    search_for_splash()
    assert(splash:wait(3))

    return splash:html()
end
    """

    def parse(self, response):
        print("Inside parse")
        # token = response.xpath('//*[@name="csrf_token"]/@value').extract_first()
        yield SplashRequest(
        # 'http://talkerscode.com/webtricks/demo/demo_ajax-login-form-using-jquery-php-and-mysql.php',
        'http://localhost/sample_proj/login_form.php',
        callback=self.portal_page,
        method='POST',
        endpoint='execute',
        args={
            'wait': 0.5,
            'lua_source': self.lua_script,
            'formdata': {
                'email': 'arjunphp@gmail.com', 
                'password': '12345'
                # 'csrf_token':token
            },
        }
    )

    def portal_page(self, response):
            print('Inside the portal_page')
            print('7'*120)
            print(response.body.decode('utf8'))
            # yield SplashRequest(
            # url='http://quotes.toscrape.com',
            # callback=self.data_download,
            # args={
            #     'wait': 0.5,
            #     'lua_source': self.lua_script,
            #     'formdata': {}
            # })

    def data_download(self, response):
        print('Data Download')
        print(response.body.text)

НАСТРОЙКИ

BOT_NAME = 'scrashtest'

SPIDER_MODULES = ['scrashtest.spiders']
NEWSPIDER_MODULE = 'scrashtest.spiders'

DOWNLOADER_MIDDLEWARES = {
    # Engine side
    'scrapy_splash.SplashCookiesMiddleware': 723,
    'scrapy_splash.SplashMiddleware': 725,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
    # Downloader side
}

SPIDER_MIDDLEWARES = {
    'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
SPLASH_URL = 'http://127.0.0.1:8050/'
# SPLASH_URL = 'http://192.168.59.103:8050/'
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'

Пожалуйста go через мой код, и если я что-то пропустил, пожалуйста, дайте мне знать. Моя цель - войти в любое приложение. Однако тот же код работает с онлайн-приложениями. Заранее спасибо за помощь

...