如何使用 `Scrapy` 抓取 `JS` 依赖的内容

How to scraper `JS` dependent content using `Scrapy`

我正在使用 Scrapywebsite (proptiger.com) 抓取 HTML 内容。但是当我在响应中搜索任何元素时,它没有找到任何元素。

页面上有文字2, 3 BHKXPath//div[@class="spec-value f16"]可以访问。但是当我使用 response.xpath('//div[@class="spec-value f16"]') 时,它不会 return 上面的文字。

它在像 https://wiki.python.org/moin/BeginnersGuide 这样的普通网站上工作正常,但在像 99acres.comproptiger.com[ 这样的网站上工作=28=]

任何帮助都会有所帮助。

使用 scrapy shell 您正在搜索的 itemprop xpath 不可用,如@furas 所说,一些内容是由 JavaScript 生成的。您可以通过将 Selenium 添加到 scrapy 来获取此内容。 Selenium 采用 URL,使用网络浏览器呈现它,scrapy 可以正常访问生成的 HTML。下面的代码是让您开始使用 Firefox 的框架,但它也适用于其他浏览器。我建议也为 Firefox 获取 Firebug,它对练习 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

本教程将引导您完成这些任务:

  • 正在创建一个新的 Scrapy 项目
  • 编写蜘蛛来抓取网站并提取数据
  • 使用命令行导出抓取的数据
  • 将蜘蛛更改为递归跟踪链接
  • 使用蜘蛛参数

Scrapy 写在Python。如果您是该语言的新手,您可能想先了解一下该语言是什么样的,以充分利用 Scrapy。