带有Nokogiri的问题开放站点-请求超时-应归咎于Etags?

问题描述 投票:0回答:1

我正在尝试使用nokogiri打开MrPorter.com

 Nokogiri::HTML(open("https://www.mrporter.com"))

并且我收到以下错误:

Net::ReadTimeout: Net::ReadTimeout with #<TCPSocket:(closed)>
from /Users/8bithero/.rbenv/versions/2.6.5/lib/ruby/2.6.0/net/protocol.rb:217:in `rbuf_fill'

此方法以前有效,但后来添加了etags,我不确定这是否是罪魁祸首。

有什么解决办法吗?是否仍然可以使用Nokogiri打开此页面(或类似页面)?也许我缺少一些必需的参数?


您可以使用邮递员(并添加content-type: application/json)进行API调用

https://www.mrporter.com/api/inseason/search/resources/store/mrp_gb/productview/666467151985458?locale=en_GB

但是,如果直接点击此按钮,除非您先访问产品页面,否则它将无法正常工作:https://www.mrporter.com/en-gb/mens/product/red-wing-shoes/shoes/lace-up-boots/8138-moc-leather-boots/666467151985458

这似乎将etags设置为约5分钟的到期时间,这就是让我觉得可能是etags有问题的原因。

有人知道如何使他们中的任何一个都可以访问吗?

ruby curl web-scraping nokogiri etag
1个回答
1
投票

如果发送net / http请求,则该站点受用户代理验证的保护。您可以按如下方式解析页面:

require 'nokogiri'

page = `curl --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" https://www.mrporter.com/en-gb/`
parse_page = Nokogiri::HTML(page)

您将获得一个已分析的页面

© www.soinside.com 2019 - 2024. All rights reserved.