使用Scrapy无法爬取spitogatos.gr房产网站的解决方案问询
解决方案
现有代码问题排查
你当前代码无法正常请求的核心原因是请求头字段名写错:headers里定义的是User Agent,正确的HTTP请求头键名为User-Agent,缺少横杠会导致站点无法识别你传入的浏览器UA,直接触发拦截规则。
具体配置步骤
- 第一步:调整Scrapy全局配置,打开项目下的
settings.py文件,修改/新增如下参数:# 按需调整是否遵守robots规则,若你的爬取行为合规(单日仅1次、数据量小、非商用)可设置为False绕过拦截 ROBOTSTXT_OBEY = False # 全局配置默认UA,不需要在爬虫代码里单独传 USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' # 单并发请求,避免触发频率限制 CONCURRENT_REQUESTS = 1 # 每个请求间隔10秒,可根据实际爬取量调整,单日单次爬取完全不会对站点造成压力 DOWNLOAD_DELAY = 10 - 第二步:简化爬虫代码,修正后的代码如下:
import scrapy class MainprojectSpider(scrapy.Spider): name = 'mainProject' allowed_domains = ['www.spitogatos.gr'] start_urls = ['https://www.spitogatos.gr/'] def parse(self, response): # 测试提取代码 print(response.xpath('//h2[@class="text thin h1"]/text()').extract()) # 后续正常写你的数据提取逻辑即可 - 第三步:实现每日自动爬取,不需要在Scrapy框架内额外开发定时逻辑,直接用系统定时任务触发即可:
- Linux系统直接配置crontab规则,每天固定时间执行
scrapy crawl mainProject命令 - Windows系统使用自带的任务计划程序,配置每日定时执行爬取命令即可
- Linux系统直接配置crontab规则,每天固定时间执行
按照以上配置调整后,因为你的爬取频率极低,基本不会被站点的反爬机制拦截,可以稳定拿到数据。
内容的提问来源于stack exchange,提问作者user3836267
相关产品推荐
相关产品推荐

