我正在尝试实现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
答案 0 :(得分:0)
我认为没有办法,但是我不确定。
我搜索了很长一段时间,却一无所获。
我必须在工作中做同样的事情,在这里我们使用scrapy,但是我尝试抓取的网站使用ajax和javascript加载新数据,而我无法通过其他任何方式获取数据表示除“点击”按钮之外的其他内容。
因此,我发现的“最佳解决方案”是使用漂亮的汤来解析HTML,然后我对要剪贴的每个项目都调用了scrapy请求。
这不是理想的方法,但是可以完成任务。 尽管它比仅使用漂亮的汤慢,但它利用了scrapy提供的所有整洁的东西。