python - 尝试使用 Scrapy 抓取数据但只得到空白答案
问题描述
我目前正在尝试从该网站上抓取特定数据,但是当我在此之后使用 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(),
}
我尝试通过多种方式解决此问题,包括更改表格的 xpath,但最终导致 csv 中甚至没有标签。
解决方案
我没有时间完全测试您的代码(即您的 xpath 表达式),但我可以给您一些顶级指针:
- A) 在
allowed_domains
中,您应该只包含ratehub.ca
而不是包含您当前拥有的整个链接。有关更多信息,请参阅文档。
假设您的目标网址是https://www.example.com/1.html,然后将“example.com”添加到列表中 - A)在您的
start_urls
中,请注意您正在复制http://
部分,这肯定行不通。 B)在你的start_urls
,你应该删除最后一个/
,好像我没有弄错scrapy会自动添加它。 - 您确定禁用 Java-Script 时表格不会消失吗?我尝试用您
xpath
的表格搜索 HTML 树,//*@id="AllRatesTable_SpQFd"]//tr
但没有返回任何内容。我建议确保您禁用 java-script 并再次尝试以确保它有效。 - 通过添加
text()
以下语句的最后一部分,您确保将文本提取回来。“率”不是文字吗?
yield {
'Rate' : row.xpath('td[1]//span//text()').get(),
'Provider': row.xpath('td[2]//text()').get(),
}
推荐阅读
- c# - VssConnection SP324098:您的浏览器无法完成操作
- sql - 根据同一行的两个日期聚合小计列
- powershell - 使用 Robocopy 更新功能将子目录中的所有文件复制到单个文件夹
- spring-boot - 使用 spring-boot-starter-data-redis-reactive 启用 Master/Replica 操作
- reactjs - 如何读取条件类名称的反应路由器之类的路径?
- sql - 有条件地从列决策中选择数据
- hibernate - 替代 JPA2 中遗留的 Hibernate 的特殊属性“元素”
- python - 如何将 EMNIST 字母从文件导入 Keras
- java - 查找对象时 javafx 中的 NullPoinerException
- sql - 在 SQL 中设置包含