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

时间:2018-09-12 07:27:02

标签: python selenium scrapy

我正在尝试实现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

1 个答案:

答案 0 :(得分:0)

我认为没有办法,但是我不确定。

我搜索了很长一段时间,却一无所获。

我必须在工作中做同样的事情,在这里我们使用scrapy,但是我尝试抓取的网站使用ajax和javascript加载新数据,而我无法通过其他任何方式获取数据表示除“点击”按钮之外的其他内容。

因此,我发现的“最佳解决方案”是使用漂亮的汤来解析HTML,然后我对要剪贴的每个项目都调用了scrapy请求。

这不是理想的方法,但是可以完成任务。 尽管它比仅使用漂亮的汤慢,但它利用了scrapy提供的所有整洁的东西。