刮擦和修改输出

问题描述 投票:0回答:1

我想用scraping从这个网站检索数据:

https://dolar.wilkinsonpc.com.co/dolar-historico/dolar-historico-2018.html

我的解析器现在看起来像这样:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.selector import Selector
from w3lib.html import remove_tags

class HDolarSpider(scrapy.Spider):
    name = 'historico-dolar'
    allowed_domains = ['dolar.wilkinsonpc.com.co']
    start_urls = ['https://dolar.wilkinsonpc.com.co/dolar-historico/dolar-historico-2018.html']

    def parse(self, response):
        for sel in response.xpath('//*[@id="tabla_dh"]'):
            date = sel.xpath('/html/body/div[3]/div[5]/div[1]/div/div/div[3]/div/div[5]/div[1]').extract()
            location = sel.xpath('/html/body/div[3]/div[5]/div[1]/div/div/div[3]/div/div[5]/div[2]').extract()
            print(date, location)

输出如下:

['<div class="dh_col_fecha">16 Septiembre 2018</div>'] ['<div class="dh_col_precio"><b>$ 3,026.05</b></div>']

我需要这样的:

2018年9月16日; 3026.05

我试图用w3lib和其他人取代而没有成功。谁能帮我?

python web-scraping scrapy scrapy-spider
1个回答
1
投票

使用/修改此代码:

# -*- coding: utf-8 -*-
import scrapy


class HDolarSpider(scrapy.Spider):
    name = 'historico-dolar'
    allowed_domains = ['dolar.wilkinsonpc.com.co']
    start_urls = ['https://dolar.wilkinsonpc.com.co/dolar-historico/dolar-historico-2018.html']

    def parse(self, response):
        # Select all div containing a div with a class whose name contains the phrase "dh_cal_fecha"
        for subject in response.xpath('//div[@id="tabla_dh"]/div[./div[contains(@class, "dh_col_fecha")]]'):
            yield {
                'date': subject.xpath('./div[@class="dh_col_fecha"]/text()').extract_first(),
                'location': subject.xpath('./div[@class="dh_col_precio"]//text()').extract_first(),
            }

如果您运行此代码:

scrapy runspider HDolarSpider.py -o Report.json

您将生成JSON格式的报告,其结构如下例所示:

enter image description here

共262项。

© www.soinside.com 2019 - 2024. All rights reserved.