Передача страницы источника, полученного из селена, в скрап - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь внедрить сканер scrapy + selenium, но я не могу получить scopy для анализа HTML после взаимодействия со страницей с использованием селена.

Код выглядит следующим образом

Полагаю, мне не нужно делать запросы с использованием scrapy.Request, это мое предположение, но я не нашел другого способа.

import scrapy
import selenium
from Clasipar.items import AnuncioItem
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC


class ClasiparSpider(scrapy.Spider):
    name = "test"

    driver = webdriver.Firefox()

    def start_requests(self):
        urls = ['https://clasipar.paraguay.com/inmuebles/casas/hermosa-casa-enbarrio-los-mangales-1142381']

        for url in urls:
            self.driver.get(url)
            self.driver.find_element_by_id('btn_view_info').click()
            self.driver.implicitly_wait(2)
            wait(self.driver, 10).until_not(EC.text_to_be_present_in_element((By.XPATH, '//*[@id="phone_number"]'), "*********"))
            yield scrapy.Request(url=self.driver.page_source,callback=self.parse)

    def parse(self, response):
        item = AnuncioItem()
        titulo = response.XPATH(
            '/html/body/main/div/section/span').extract().strip()
        anunciante = response.XPATH(
            '/html/body/main/div/section/div[3]/div[1]/div/h5').extract().strip()
        telefono = response.XPATH('//*[@id="phone_number"]').extract().strip()
        email = response.XPATH(
            '/html/body/main/div/section/div[3]/div[2]/form/ul/li[2]/b/a').extract().strip()
        precio = response.XPATH(
            '/html/body/main/div/section/div[3]/div[3]/h3').extract().strip()
        departamento = response.XPATH(
            '/html/body/main/div/section/div[4]/div[1]/h6').extract().strip()
        nroAnuncio = response.XPATH(
            '/html/body/main/div/section/div[4]/div[2]/h6').extract().strip()
        zona = response.XPATH(
            '/html/body/main/div/section/div[4]/div[3]/h6').extract().strip()
        visitas = response.XPATH(
            '/html/body/main/div/section/div[4]/div[4]/h6').extract().strip()
        fechaPublicacion = response.XPATH(
            '/html/body/main/div/section/div[4]/div[5]/h6').extract().strip()
        descripcion = response.XPATH(
            '/html/body/main/div/section/p').extract().strip()
    pass

1 Ответ

0 голосов
/ 12 февраля 2019

Я думаю, что нет никакого способа, но я не совсем уверен.

Я долго искал и ничего не нашел.

Я должен делать то же самое на работе, здесь мы используем скрап, но веб-сайт, который я пытаюсь скрести, использует ajax и javascript для загрузки новых данных, и я не могу получить данныелюбым другим способом, кроме «нажатия» на кнопку.

Итак, «лучшее исправление», которое я нашел, - это использование красивого супа для анализа HTML, а затем я вызываю запрос scrapy для каждого элемента, который я выбрасываю.

Это не идеально, но делает работу.Несмотря на то, что он медленнее, чем просто использование красивого супа, он использует все преимущества аккуратных вещей, которые предоставляет скрап.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...