我正在尝试使用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有问题的原因。
有人知道如何使他们中的任何一个都可以访问吗?
如果发送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)
您将获得一个已分析的页面