【发布时间】:2019-10-01 11:12:21
【问题描述】:
我在 python 中创建了一个脚本,使用 scrapy 和 selenium 来解析不同餐厅的主页中的链接,然后从它们的内页解析每家餐厅的名称。
当我将 scrapy 与 selenium 结合使用时,回调(或在方法之间传递参数)如何在不发送请求的情况下工作?
以下脚本使用我无法摆脱的self.driver.get(response.url) 覆盖回调:
import scrapy
from selenium import webdriver
from scrapy.crawler import CrawlerProcess
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support import expected_conditions as EC
class YPageSpider(scrapy.Spider):
name = "yellowpages"
link = 'https://www.yellowpages.com/search?search_terms=Pizza+Hut&geo_location_terms=San+Francisco%2C+CA'
def start_requests(self):
self.driver = webdriver.Chrome()
self.wait = WebDriverWait(self.driver, 10)
yield scrapy.Request(self.link,callback=self.parse)
def parse(self,response):
self.driver.get(response.url)
for elem in self.wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".v-card .info a.business-name"))):
yield scrapy.Request(elem.get_attribute("href"),callback=self.parse_info)
def parse_info(self,response):
self.driver.get(response.url)
elem = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".sales-info > h1"))).text
yield {"title":elem}
if __name__ == '__main__':
c = CrawlerProcess()
c.crawl(YPageSpider)
c.start()
【问题讨论】:
-
我不太确定你的问题是什么。你试图在哪里传递什么论点?错误是什么?
-
将链接从
parse()传递到parse_info()@NoSplitSherlock。 -
我还是不知道你遇到了什么错误。
-
我没有收到任何错误。该脚本已经在运行。然而,逻辑是错误的,这就是我问这个问题的原因?
-
你根本没有解释错误的逻辑。你的脚本有什么问题?您需要覆盖某些东西的事实?那你为什么需要?我这里没有信息。
标签: python python-3.x selenium web-scraping scrapy