Я хочу пополнять авиабилеты с British Airways и хранить их в монгоббе. Я могу пройти мимо формы поиска, но я не могу очистить данные.Python, Selenium и Scrapy не работают вместе?
Мой паук:
from scrapy import Spider
from scrapy.selector import Selector
from scrapy.http import FormRequest
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
import time
from flight.items import FlightItem
class BASpider(Spider):
name = "BA"
allowed_domains = ["britishairways.com"]
start_urls = [
"http://www.britishairways.com/travel/home/public/en_za?DM1_Channel=PPC&DM1_Mkt=ZA&DM1_Campaign=APMEA_ZA_EN_PUREBRAND_MASTERBRAND&Brand=Y&gclid=CLvt24zsqMgCFUGg2wodds4Prw",
]
def __init__(self):
self.driver = webdriver.Firefox()
def parse(self, response):
self.driver.get(response.url)
WebDriverWait(self.driver, 10).until(lambda s: s.find_element_by_xpath('//select[@id="depCountry"]').is_displayed())
departCountry_form = self.driver.find_element_by_id('depCountry')
departCity_form = self.driver.find_element_by_id('from')
oneWay = self.driver.find_element_by_id('journeyTypeOW')
oneWay.click()
dest_form = self.driver.find_element_by_id('planTripFlightDestination')
date_form = self.driver.find_element_by_id('depDate')
butt = self.driver.find_element_by_class_name('button')
departCountry_form.send_keys("South Africa")
departCity_form.send_keys("Johannesburg")
dest_form.send_keys("London")
date_form.clear()
date_form.send_keys("05/10/15")
actions = ActionChains(self.driver)
actions.click(butt)
actions.perform()
time.sleep(35)
def parse_post(self, response):
flightList = Selector(response).xpath('//table[@class="flightList directFlightsTable connectflights"]/tbody/tr')
for flight in flightList:
item = FlightItem()
item['dTime'] = flight.xpath(
'td[7]/table/tbody/tr/td[@class=" departure"]/div/div/span[1]/text()').extract()[0]
item['aTime'] = flight.xpath(
'td[7]/table/tbody/tr/td[@class=" arrival"]/span[1]/text()').extract()[0]
item['flightNr'] = flight.xpath(
'td[7]/table/tbody/tr/td[@class=" operator"]/div/div/span[2]/href').extract()[0]
item['price_economy'] = flight.xpath(
'td[7]/table/tbody/tr/td[@class=" priceselecter price-M ch3 col1"]/span/span[2]/label/text()').extract()[0]
item['price_premium'] = flight.xpath(
'td[7]/table/tbody/tr/td[@class=" priceselecter price-W ch3 col2"]/span/span[2]/label/text()').extract()[0]
item['price_business'] = flight.xpath(
'td[7]/table/tbody/tr/td[@class=" priceselecter price-C ch3 col3"]/span/span[2]/label/text()').extract()[0]
yield item
self.driver.close()
Я не получаю какие-либо ошибки, это просто не очищая.
Я получил некоторые пауки с использованием селена тоже, так что они работают, может быть, вы что-то не хватает, не могли бы вы поделиться журналы и убедитесь, что вы получаете информацию о каждом xpath? Где ваш код вызывает 'parse_post'? – eLRuLL
Я не проверял ваш код, но как ответ на ваш вопрос «Python, Selenium и Scrapy не работают вместе?», Я могу сказать вам, что вы можете использовать Scrapy with Selenium точно. Вы можете использовать эту комбинацию, когда ваш целевой сайт включает в себя некоторое взаимодействие ajax, которое необходимо захватить через взаимодействие с браузером. Вы можете найти пример здесь: http://www.6020peaks.com/2014/12/how-to-scrape-hidden-web-data-with-python/ – narko