Python 将从selenium获得的页面源传递给scrapy

Python 将从selenium获得的页面源传递给scrapy,python,selenium,scrapy,Python,Selenium,Scrapy,我试图实现一个scrapy+selenium爬虫程序,但在使用selenium与页面交互后,我似乎无法让scrapy解析HTML 代码如下 我想我不必用scrapy提出请求。请求是我的猜测,但我没有找到任何其他方法 import scrapy import selenium from Clasipar.items import AnuncioItem from selenium import webdriver import time from selenium.webdriver.common

我试图实现一个scrapy+selenium爬虫程序,但在使用selenium与页面交互后,我似乎无法让scrapy解析HTML

代码如下

我想我不必用scrapy提出请求。请求是我的猜测,但我没有找到任何其他方法

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

我想没有办法,但我不是很确定

我找了好一阵子,什么也没找到

我必须在工作中做同样的事情,这里我们使用scrapy,但我尝试使用ajax和javascript加载新数据,除了“单击”按钮之外,我无法通过任何其他方式获取数据

因此,我发现的“最佳修复方法”是使用beautiful soup解析HTML,然后我调用一个scrapy请求来处理我要废弃的每个项目

这并不理想,但它确实起到了作用。
尽管它比仅仅使用漂亮的汤慢,但它利用了scrapy提供的所有整洁的东西

请注意,您可以使用selenium内置的方法和属性解析页面内容-无需使用Scrapy。另外,不要在应该注释掉隐式等待的同一脚本中使用隐式和显式等待。我之所以选择使用scrapy,是因为解析数据要容易得多。我想这并不容易,因为您已经发布了这个问题,对吧?:)相信我,使用纯硒代码,同样会看起来很简单。如果按钮向服务器发出ajax请求,您可以检查请求中发送的参数,并使用它们在scrapy中创建请求,以获取信息,而无需ant使用bs4和scrapy。