如何解析javascript写的html文本?

时间:2017-04-21 04:54:48

标签: javascript json xpath web-scraping scrapy

我是scrapy的新手,需要为数据挖掘项目搜索一些数据集。我需要刮“http://www.moneycontrol.com/india/stockpricequote/”。关注每个链接并提取数据。我写了一个工作的scrapy爬虫来使用xpth和css获取数据。但我在页面中遇到了这个元素,它使用javascript来填充选项卡表。每个选项卡的xpath都相同。因此无法提取单个选​​项卡的数据 并从每个标签this is the tabbed element with gainpercentage in 5th row last column

获取数据库存增益百分比

我可以从xpath和css中抓取数据,但是页面的一部分来自javascript。怎么能刮掉这样的数据呢?我还需要每个标签中的数据 请告诉我一种方法,因为其他答案使用json,我不熟悉它。

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class NewsItem(scrapy.Item):
    name = scrapy.Field()

class StationDetailSpider(CrawlSpider):
    name = 'test2'
    start_urls = ["http://www.moneycontrol.com/india/stockpricequote/"]
    rules = (
    Rule(LinkExtractor(restrict_xpaths="//a[@class='bl_12']"), follow=False, callback='parse_news'),
    Rule(LinkExtractor(allow=r"/diversified/.*$"), callback='parse_news')
)


    def parse_news(self, response):

        item = NewsItem()
        NEWS1_SELECTOR = 'div#disp_nse_hist tr:nth-child(5) > td:nth-child(4)::text'
        TIME1_SELECTOR = 'div#disp_nse_hist tr:nth-child(5) > td:nth-child(4)::text'
        NAME_SELECTOR = 'div#disp_nse_hist tr:nth-child(5) > td:nth-child(4)::text'

        print("------------------------------------starting extraction------------")
        item['name']=response.css(NAME_SELECTOR).extract_first()
        item['time1']=response.css(TIME1_SELECTOR).extract_first()
        item['news1']=response.css(NEWS1_SELECTOR).extract()
        return item

2 个答案:

答案 0 :(得分:0)

此处包含https://stackoverflow.com/a/8594831/7892562

您所谈论的是抓取AJAX页面,这些页面可以动态加载新内容而无需重新加载整个页面。

按照说明操作,您应该没有问题。作为您列出的页面的示例,当您单击不同的时间范围(周,月,年等)时,会发出请求

http://www.moneycontrol.com/stocks/company_info/get_histprices.php?ex=B&sc_id=B3M&range=7

如您所见,url有3个查询参数传递给它。最后两个表示公司ID和历史定价的天数范围。按照该链接,您将看到我正在谈论的内容。

鉴于这些知识,您应该能够弄清楚如何修改您的蜘蛛来抓取这些信息。

答案 1 :(得分:0)

查看splash:http://splash.readthedocs.io/en/stable/,它是scrapy的渲染服务,可以让你抓取基于javascript的网站。

您还可以创建自己的下载中间件并使用Selenium:How to write customize Downloader Middleware for selenium and Scrapy?

希望这有帮助。