Использование scrapy shell
itemprop XPath вы ищете не доступна, как сказал @furas, некоторые из содержания генерируется JavaScript. Вы можете получить этот контент, добавив Selenium для лечения. Selenium получает URL-адрес, отображает его с помощью веб-браузера, а scrapy может получить доступ к полученному HTML как обычно. Код ниже представляет собой скелет, чтобы вы начали использовать Firefox, но он работает и с другими браузерами. Я бы порекомендовал заполучить Firebug для Firefox, это полезно для практики xpaths.
import scrapy
from scrapy import signals
from scrapy.xlib.pydispatch import dispatcher
from scrapy.http import TextResponse
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
class SearchSpider(scrapy.Spider):
name = "search"
allowed_domains = ['www.somedomain.com']
start_urls = ['https://www.somewebsite.com']
def __init__(self, filename=None):
# wire us up to selenium
self.driver = webdriver.Firefox()
dispatcher.connect(self.spider_closed, signals.spider_closed)
def spider_closed(self, spider):
self.driver.close()
def parse(self, response):
item = someItem()
# Load the current page into Selenium
self.driver.get(response.url)
try:
WebDriverWait(self.driver, 30).until(EC.presence_of_element_located((By.XPATH, '//span[@itemprop="name"]')))
except TimeoutException:
item['status'] = 'timed out'
# Sync scrapy and selenium so they agree on the page we're looking at then let scrapy take over
resp = TextResponse(url=self.driver.current_url, body=self.driver.page_source, encoding='utf-8')
# scrape as normal
В документе нет элементов с атрибутом 'itemprop'. –
, если контент сгенерирован JavaScript, вы не можете найти его. – furas