Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用'Scrapy'刮除依赖于'JS'的内容`_Python_Web Scraping_Scrapy_Web Crawler_Scrapy Spider - Fatal编程技术网

Python 如何使用'Scrapy'刮除依赖于'JS'的内容`

Python 如何使用'Scrapy'刮除依赖于'JS'的内容`,python,web-scraping,scrapy,web-crawler,scrapy-spider,Python,Web Scraping,Scrapy,Web Crawler,Scrapy Spider,我正在使用Scrapy从一个数据库中刮取HTML内容。但是当我搜索响应中的任何元素时,它没有找到任何元素 页面上有一个文本2,3 BHK,可通过XPath/div[@class=“spec value f16”]访问。但是当我使用response.xpath('//div[@class=“spec value f16”]')时,它不会返回上面的文本 它在正常网站上运行良好,但在99acres.com,proptiger.com 任何帮助都会很有帮助。使用scrapy shell您正在搜索的ite

我正在使用
Scrapy
从一个数据库中刮取
HTML
内容。但是当我搜索响应中的任何元素时,它没有找到任何元素

页面上有一个文本2,3 BHK,可通过
XPath
/div[@class=“spec value f16”]
访问。但是当我使用
response.xpath('//div[@class=“spec value f16”]')
时,它不会返回上面的文本

它在正常网站上运行良好,但在99acres.comproptiger.com


任何帮助都会很有帮助。

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

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

  • 创建新的Scrapy项目
  • 编写爬行器来抓取站点并提取数据
  • 使用命令行导出刮取的数据
  • 将spider更改为递归跟踪链接
  • 使用spider参数

Scrapy是用Python编写的。如果您对该语言不熟悉,您可能希望首先了解该语言是什么样的,以充分利用Scrapy。

文档中没有具有
itemprop
属性的元素。如果内容是由JavaScript生成的,则您无法找到它。