如何使用`Scrapy`来刮擦`JS`依赖内容

时间:2016-01-04 12:54:12

标签: python web-scraping scrapy web-crawler scrapy-spider

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

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

它适用于https://wiki.python.org/moin/BeginnersGuide等常规网站,但在 99acres.com proptiger.com 等网站上工作

任何帮助都会有所帮助。

2 个答案:

答案 0 :(得分:1)

使用scrapy shell正在搜索的itemprop xpath,因为@furas说,其中一些内容是由JavaScript生成的。您可以通过将Selenium添加到scrapy来获得此内容。 Selenium使用URL,使用Web浏览器呈现它,scrapy可以正常访问生成的HTML。下面的代码是一个让您开始使用Firefox的框架,但它也适用于其他浏览器。我建议也要使用Firebug for Firefox,这对于练习xpath很有用。

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

答案 1 :(得分:0)

本教程将指导您完成以下任务:

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

Scrapy用Python编写。如果您是该语言的新手,则可能首先要了解一下该语言的外观,以充分利用Scrapy。