Я использую 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-адреса.