【发布时间】:2020-05-28 03:35:06
【问题描述】:
我构建了一个可以工作到一定程度的刮板:它导航到记录列表,将记录解析为关键记录以进行进一步抓取,转到这些单独的记录,但无法解析记录中的表,因为它们已加载通过 JavaScript。 JavaScript 发出一个POST 请求(xmr)来填充它们。因此,如果未启用 JavaScript,它会返回类似“未找到记录”之类的信息。
所以我读到了这个问题:Link
我使用浏览器开发工具检查了请求标头。标头包括:
fetch("https://example.com/Search/GridQuery?query=foo", {
"headers": {
"accept": "text/plain, */*; q=0.01",
"accept-language": "en-US,en;q=0.9,es;q=0.8",
"cache-control": "no-cache",
"content-type": "application/x-www-form-urlencoded",
"pragma": "no-cache",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-requested-with": "XMLHttpRequest"
},
"referrer": "https://example.com/SiteSearch/Search?query=bar",
"referrerPolicy": "no-referrer-when-downgrade",
"body": "page=1&size=10&useFilters=false",
"method": "POST",
"mode": "cors",
"credentials": "include"
});
浏览器确实指示了一个cookie,虽然不是通过复制获取输出... 然后我尝试了这个:
url = response.urljoin(response.css('div#Foo a::attr(href)').get())
yield Request(url=url,
method='POST',
body='{"filters": ["page": "1", "size": "10", "useFilters": "False"]}',
headers={'x-requested-with': 'XMLHttpRequest'},
callback=self.parse_table)
我收到回复,但仍然显示“未找到记录”。所以POST 请求不能正常工作。
我需要将所有内容都放在请求标头中吗?如何确定必须包含哪些内容?是否需要 Cookie?
【问题讨论】:
标签: python scrapy xmlhttprequest