Учитывая столбец из более чем 600 000 URL-адресов, как мне извлечь имя домена верхнего уровня и эффективно найти IP-адреса? - PullRequest
1 голос
/ 14 апреля 2019

Я использую Google Colab Laboratory и bigquery для запроса таблицы, содержащей более 600 000 URL-адресов.

Я хочу извлечь имя домена верхнего уровня, найти IP-адреса доменных имен, а затем вставить результаты вта же таблица.

В настоящее время я грубо заставляю проблему, опрашивая столбец имен URL.Итерация по каждому URL и использование следующих функций для извлечения соответствующей информации.Затем я записываю каждую запись в csv с целью использования CVS для вставки столбца доменного имени верхнего уровня и столбца ip-адреса в мою таблицу.

#I defined these functions to extract top level domain and ip address

import socket
from urllib.parse import urlparse
#Function to extract top level domain
def extractTopLevel(url):
    return urlparse(url).hostname

#Function to get ip Address of top level domain
def ipAddr(url):
  try:
     ipAddr = socket.gethostbyname(url)
  except:
    return "None"
  return ipAddr
#this is how I query my table with the URLs
#update the topLevel Domain column
from google.cloud import bigquery


# https://cloud.google.com/resource-manager/docs/creating-managing-projects
project_id = [projet_id]
client = bigquery.Client(project=project_id)

query = (
    "SELECT (URL,topLvlDomain, ipAddr) FROM characterizing_Web.adscape_urls "
)
query_job = client.query(
    query,
    # Location must match that of the dataset(s) referenced in the query.
    location="US",
)  # API request - starts the query
#Here's how I write to csv

table_ref = client.dataset(dataset_id).table(table_id)
table = client.get_table(table_ref)  # API request
import csv

with open('domain_ip_topLvel.csv', mode='w') as gray_web:
    gray_web_writer = csv.writer(gray_web, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)

    for row in query_job:  # API request - fetches results
      gray_web_writer.writerow([extractTopLevel(row[0]['_field_1']), ipAddr(extractTopLevel(row[0]['_field_1']))])

Я бы хотелчтобы иметь возможность вызывать какую-то функцию в query_job для более эффективного извлечения доменного имени и IP-адреса.

...