Тайм-аут соединения Ruby Mechanize - PullRequest
0 голосов
/ 10 марта 2012

Я практиковался в написании нескольких Ruby-скребков, используя Mechanize и Nokogiri. Например, здесь (однако, кажется, что после выполнения определенного количества запросов (в данном случае около 14000), я получаю сообщение об ошибке, указывающее, что произошла ошибка при превышении времени ожидания соединения:

/ var / lib / gems / 1.8 / gems / net-http-persistent-2.5.1 / lib / net / http / persistent / ssl_reuse.rb: 90: in `initialize ': время ожидания соединения - соединение (2 ) (Errno :: ETIMEDOUT)

Я много гуглил в Интернете, но лучший ответ, который я могу получить, - это то, что я делаю слишком много запросов к серверу. Есть ли способ исправить это путем регулирования или каким-либо другим способом?

1 Ответ

0 голосов
/ 30 августа 2012

После некоторого опыта программирования я понял, что это была простая ошибка с моей стороны: мой код не уловил выданную ошибку и соответствующим образом перешел к следующей ссылке, когда ссылка была повреждена.

Для любогоначинающие программисты на Ruby, которые сталкиваются с подобной проблемой:

Ошибка тайм-аута соединения обычно связана с неверной ссылкой и т. д. на странице удаления.

Необходимо свернуть коддоступ к ссылке в выражении, таком как ниже

begin 
     #[1 your scraping code here ] 
rescue
     #[2 code to move to the next link/page/etc. that you are scraping instead of sticking to the invalid one] 
end

Например, если у вас есть цикл for, который перебирает ссылки и извлекает информацию из каждой ссылки, то это должно быть в [1] и код дляпереход к следующей ссылке (рассмотрите возможность использования чего-то вроде ruby ​​«next») должен быть размещен в [2].Вы также можете распечатать что-нибудь на консоли, чтобы пользователь знал, что ссылка недействительна.

...