Создание веб-скребка автономной системы счисления / Как извлекать числа из текстового файла

#node.js #web-scraping #text-files

#node.js #веб-скребок #текстовые файлы

Вопрос:

Я пытаюсь создать веб-скребок с помощью javascript, используя пакеты узлов, чтобы получить данные префикса asn с этого веб-сайта:http://bgp.he.net/AS2#_prefixes .

Это то, что у меня есть на данный момент:

 var request = require('request');
var cheerio = require('cheerio');

apnList = {
    'MIT': 3,
    'Dynamics': 15,
    'NYU': 12,
    'Harvard': 11,
    'Bull HN Information Sys': 6,
    'NNIC': 22,
    'Symbolics': 5,
    'University of Delaware': 2
};
for (apn in apnList) {
    var url = 'http://bgp.he.net/AS' apnList[apn] '#_prefixes'


    request(url,  (function(apn) { return function(err, resp, body) {
        $ = cheerio.load(body);
        console.log(body) 
            
    }})(apn));
}
  

Когда я запускаю файл в терминале, я получаю это:

 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /AS11
on this server.</p>
<hr>
<address>Apache/2.2.22 (Ubuntu) Server at bgp.he.net Port 80</address>
</body></html>
  

Для каждого числа. Как мне это исправить?

Также, дополнительный вопрос: В конце я хочу взять каждый номер asn из этого текстового файла и передать его в цикл for.

 [asn.txt]                                        2014-06-30 02:05:03Z

This file contains a list of autonomous system numbers and names of all
registered ASNs.  The column on the right below contains the ARIN
database "handle" of the technical, abuse or NOC contacts for the ASN.
Additional information may be obtained about any of the ASN contacts
in this list by querying the ARIN WHOIS server.  For questions or updates
on this information please contact the ARIN Registration Services Hostmaster
staff, HOSTMASTER@ARIN.NET.

AS Number               AS Name                                            POC Handles
 0                       IANA-RSVD-0                                        IANA-IP-ARIN (Abuse), IANA-ARIN (Admin), IANA-IP-ARIN (Tech)
 1                       LVLT-1                                             IPADD5-ARIN (Tech), APL8-ARIN (Abuse), NOCSU27-ARIN (NOC), APL7-ARIN (Admin)
 2                       UDEL-DCN                                           CASHJ-ARIN (Tech), NSS13-ARIN (Abuse), DJG2-ARIN (Tech), DJG2-ARIN (Admin)
 3                       MIT-GATEWAYS                                       MNO78-ARIN (NOC), SILIS-ARIN (Admin), MNS18-ARIN (Abuse), SILIS-ARIN (Tech)
 4                       ISI-AS                                             ACT-ORG-ARIN (Admin), ACT-ORG-ARIN (Abuse), ACT-ORG-ARIN (Tech)
 5                       SYMBOLICS                                          SG52-ARIN (Tech), SG52-ARIN (Admin), SG52-ARIN (Abuse)
 6                       BULL-HN                                            USINT-ARIN (Admin), ZB126-ARIN (Abuse), ZB126-ARIN (Tech), JLM23-ARIN (Tech)
 7                       RIPE-ASNBLOCK-7                                    ABUSE3850-ARIN (Abuse), RNO29-ARIN (Tech), RNO29-ARIN (Admin)
 8                       RICE-AS                                            RUH-ORG-ARIN (Tech), RUH-ORG-ARIN (Admin), RUH-ORG-ARIN (Abuse)
 9                       CMU-ROUTER                                         CH4-ORG-ARIN (Tech), CH4-ORG-ARIN (NOC), CMA3-ARIN (Abuse), CH4-ORG-ARIN (Admin)
 10                      CSNET-EXT-AS                                       CS15-ARIN (Abuse), CS15-ARIN (Tech), CS15-ARIN (Admin)
 11                      HARVARD                                            JNL17-ARIN (Admin), JNL17-ARIN (Tech
  

Это был всего лишь фрагмент этого. Это продолжается для многих тысяч чисел. Есть ли возможность выборочно извлекать каждое число из столбца AS number?

Ответ №1:

Кажется bgp.he.net блокирует попытки очистки своего сайта, возможно, на основе пользовательского агента. Вот почему вы получаете ошибку 403: доступ запрещен! Вы могли бы попробовать изменить пользовательский агент, который Node.js используется при получении удаленных URL-адресов (не уверен, как это сделать сразу), но, похоже, Hurricane Electric не любитель скребка, поэтому вам, вероятно, следует избегать его.

Комментарии:

1. Забыл вернуться и ответить на это. Да, объект options позволяет передавать в заголовке.

Ответ №2:

Забыл вернуться и ответить на это.

 var request = require('request');
var cheerio = require('cheerio');
var fs= require('fs')
var filename="/scraping/asn.txt "

apnList = {
    'MIT': 3,
    'Dynamics': 15,
    'NYU': 12,
    'Harvard': 11,
    'Bull HN Information Sys': 6,
    'NNIC': 22,
    'Symbolics': 5,
    'University of Delaware': 2
};
for (apn in apnList) {
    var options = {
        url : 'http://bgp.he.net/AS' apnList[apn] '#_prefixes',
        headers:  {
            'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36'
        }
    };


    request(options,  (function(apn) { return function(err, resp, body) {
        var $ = cheerio.load(body);
        $('#table_prefixes4 tr').each(function(index, prefix) {

            $(this).find('.nowrap').each(function(){
            event = $(this).text().trim();
            nextevent = $(this).next().text();
            console.log(apn "," event "," nextevent)
            });        
        });


    }})(apn));
}