python - 如何使用 scrapy-splash 从本网站获取动态加载的内容?
问题描述
我正在尝试使用 scrapy-splash 从该网站获取数据,但我无法提取数据。我想获取有关每个真实状态的数据,例如 href、价格等。这是我的代码:
在settings.py中:
ROBOTSTXT_OBEY = False
USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36"
SPLASH_ENABLED = True
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
SPLASH_URL = 'http://localhost:8050/'
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
我的蜘蛛:
class M2Spider(scrapy.Spider):
name = "m2"
allowed_domains = ['metrocuadrado.com']
start_urls = [
'https://www.metrocuadrado.com/bodega/arriendo'
]
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url=url,callback= self.parse,
endpoint='render.html',
args={'wait': 10},)
def parse(self, response):
print("--------------------------------------------------------------")
real_states= response.selector.xpath(".//a[@class='sc-bdVaJa ebNrSm']").getall()
print("real_states")
输出打印是一个空列表 []。我是新手。有什么建议么?
解决方案
我会做的是:
向https://www.metrocuadrado.com/results/_next/static/chunks/commons.8afec6af6d5add2097bf.js发送请求,如果您搜索“X-Api-Key”,则会在响应中找到 API 密钥. 因此可以使用正则表达式轻松提取,例如:re.findall(r'"X-Api-Key":"(\w+)"')
.
然后,当您提取 API 密钥后,向https://www.metrocuadrado.com/rest-search/search?seo=/bodega/arriendo&from=0&size=50发送请求,这是网站中的隐藏 API你发送。要获得有效的响应,您必须像这样附加标题
scrapy.Request(
url=url_variable,
headers={
"x-api-key": api_key_variable_from_prev_step
}
)
从该 API 中,您可以获得 JSON 格式的数据,这通常比解析 html 更可靠,因为它的变化更频繁。
推荐阅读
- vba - 打开表单后如何在 Word 文档末尾添加子文档?
- vba - 删除 Power Point 幻灯片中的现有图表并使用 VBA 替换为新图表
- django - 为 django 应用程序添加安全标头的最佳做法是什么?
- c# - 无法使用淘汰组件呈现部分 html
- visual-studio - 应用程序链接到 msvcp140d 而不是 msvcp140
- c# - 在循环中运行 CheckZipPassword() 时出现“状态错误(无效的距离代码)”
- azure - 在 Azure VM 中从 Azure 容器注册表运行容器
- swift - 如何在此用例中对表格视图单元格进行排序
- javascript - 添加反应以嵌入订单
- python - Cython:避免在每个扩展上编译所有 C/C++ 文件。目标:在 PyPi 中分发