尝试使用 Scrapy 抓取数据但只得到空白答案

Trying to use Scrapy to scrape data but only getting blank answers

我目前正在尝试从该网站抓取特定数据,但是当我在此之后使用 cmd 进行抓取时,json 和 csv 文件最终变成空白,我做错了什么?

import scrapy
class RatesSpider(scrapy.Spider):
    name = 'rates'
    allowed_domains = ['https://www.ratehub.ca/best-mortgage-rates/5-year/fixed']
    start_urls = ['http://https://www.ratehub.ca/best-mortgage-rates/5-year/fixed/']
 
    def parse(self, response):
        for row in response.xpath('//*[@id="AllRatesTable_SpQFd"]//tr'):
            yield {
                'Rate' : row.xpath('td[1]//span').get(),
                'Provider': row.xpath('td[2]//text()').get(),
            }

我已经尝试通过多种方式解决此问题,包括更改 table 的 xpath,但最终结果是 csv 中甚至没有标签。

我没有时间全面测试您的代码(即您的 xpath 表达式),但我可以给您一些顶级指导:

  1. A) 在 allowed_domains 中,您应该只包含 ratehub.ca 而不是当前拥有的整个 link。有关详细信息,请参阅 docs
    假设您的目标 url 是 https://www.example.com/1.html,然后将 'example.com' 添加到列表中
  2. A) 在您的 start_urls 中,请注意您正在复制 http:// 部分,这肯定行不通。 B) 在你的 start_urls 中,你应该删除最后一个 /,就好像我没记错一样,scrapy 会自动添加它。
  3. 您确定禁用 Java-Script 后 table 不会消失吗?我尝试用您的 xpath 在 HTML 树中搜索 table //*@id="AllRatesTable_SpQFd"]//tr 但没有返回任何内容。我建议您确保禁用 java-script 并重试以确保其正常工作。
  4. 通过在以下语句的最后部分添加 text(),确保提取回文本。 'rate'不是文字吗?
yield {
                'Rate' : row.xpath('td[1]//span//text()').get(),
                'Provider': row.xpath('td[2]//text()').get(),
            }