Парсер поисковой выдачи(ссылок) гугл, как пайтон скрипт

Часы
15.02.2025
Часы
21.05.2025
Глазик
361
Сердечки
0
Соединённые точки
0
Соединённые точки
0
Соединённые точки
0
Теги: Парсер Однопоточный Парсер на API Питон парсер на python Парсер поисковой выдач
Для Линукс
Для Линукс
Для Виндовс
Для Виндовс
Интерфейс терминальной строки
Интерфейс терминальной строки
Парсер
Парсер

Описание

Этот парсер поисковых запросов гугл или ссылок с поисковой выдачи написанный на питоне. Он парсит поисковую выдачу от гугла используя его официальный API.

Файл конфигурации, config.json

{
"key": "AIzaSyDmt2BUl9gwkrw4iOaObCdosnQcjH4M9B4",
"cx": "43ed4817eb4d8481a",
"save_to": "exel",
"title": true,
"description": false,
"url": true,
"depth": 1
}

Файл скрипта, main.py

import json
import argparse
import requests
import pandas
from urllib.parse import quote, unquote


def save_to_json(path, list):
with open(path, 'w', encoding='utf-8') as file:
json.dump(list, file, indent=2, ensure_ascii=False)
file.close()

def save_to_exel(path, data):
frame = pandas.DataFrame({
'title': [],
'link': [],
'description': []
})
for indx, entry in enumerate(data):
frame.at[indx, 'title'] = entry['title']
frame.at[indx, 'link'] = entry['url']
frame.at[indx, 'description'] = entry['description']
frame.to_excel(path, index=False )

def serp_page_scrape(query: str, options: dict) -> list:
data = []
for i in range(0, options['depth']):
try:
with open(f'./data/temp/{query}_{i*10 + 1}-{i*10 + 10}.json', 'r+', encoding='utf-8') as file:
data_temp = json.loads(file.read())
for item in data_temp['items']:
title = None
if options['title']:
title = item['title']
description = None
if options['description']:
description = item['snippet']
url = None
if options['url']:
url = item['link']

data.append({
'title': title,
'description': description,
'url': url,
})
except:
pass
if options['save_to'] == 'json':
save_to_json(f'./data/serp/{query}.json', data)
else:
save_to_exel(f'./data/serp/{query}.xlsx', data)

return data

def serp_scrape_init(query: str, options: dict = {}) -> list:
print(f'Query: {unquote(query)},\nOptions: title={options['title']} | description={options['description']} | urls={options['url']} | depth={options['depth']} | save to={options['save_to']}')
for i in range(0, options['depth']):
response = requests.get(f'https://www.googleapis.com/customsearch/v1?key={options['key']}&cx={options['cx']}&q={query}&num=10&start={i * 10 + 1}')
save_to_json(f'./data/temp/{query}_{i*10 + 1}-{i*10 + 10}.json',response.json())

def run():
# This is going to be only in standalone script
# Get the options and query from CLI
parser = argparse.ArgumentParser(add_help=True)
parser.add_argument('-q', type=str, help='Query to parse', metavar='QUERY', required=True, nargs='*')
parser.add_argument('-C', type=str, help='Path to config, in json format', metavar='CONFIG_FILE', required=True, nargs=1)
args = parser.parse_args()
# query
raw_query = ''.join(word + ' ' for word in args.q)
if raw_query is None:
return
query = quote(raw_query)
# check if config exist
options = {
'key': '',
'cx': '',
'save_to': '',
'title': '',
'description': '',
'url': '',
'depth':''
}
with open(args.C[0], 'r') as file:
data = json.loads(file.read())
for key in data:
if options.get(key) is not None:
options[key] = data[key]
else:
print(f'ERROR: Something went wrong in your config file, {key}')
return False

# check depth
if options['depth'] > 10:
print('WARNING: Google Search API allowed only 100 search results to be available')
options['depth'] = 10
else:
options['depth'] = data['depth']
serp_scrape_init(query, options)
serp_page_scrape(query, options)

if __name__ == "__main__":
run()

Медиа файлы

  1. files/XX/GoogleSERP_simple.zip

Похожие инструменты

Парсер прокси. Python скрипт-инструмент

Интерфейс терминальной строки
Парсер
Это бесплатный скраппер прокси из бесплатных источников. С обходом блокировок при помощи всё тех же прокси и ротации пользовательских агентов в многопоточном режиме. С возможностью фильтровать и группировать прокси по странам и протоколу.

Парсер кибер форума

Интерфейс терминальной строки
Парсер
Этот парсер парсит все вопросы в форуме в многопоточном режиме. Ничего особенного просто пример.

Парсер seo блога

Интерфейс терминальной строки
Парсер
Этот парсер парсит доступный контент на сайте в многопоточном режиме с ротацией пользовательских агентов. Простой пример.

Инструмент для проверки прокси написанный на Python

Интерфейс терминальной строки
Его суть в том что он может проверять прокси по различнмы URL, и присваивать им определённый вес, реализован ввиде python скрипта. Вес зависит от того насколько часто удавалось связаться с целевым сайтом через прокси. Реализован в многопоточном режиме на python.

Пример простого парсера на python

Интерфейс терминальной строки
Парсер
Это простой парсер как статических, так и динамических страниц с сайтов. Для примера, я решил парсить изображения, ибо именно они являются объектом оптимизации для статически-созданных сайтов. Использует декораторы.

Генератор содержания(индекса) статьи для Django сайта

Джанго приложение
Парсер
Это инструмент представляет собой Django-приложение, которое генерирует "Содержание" той страницы, на которой оно установленно. Из-за особенности устройства Django-фреймворка, вся генерация происходит на сервере, то есть SSR-метод рендеринга. Так же данное приложение создаёт анкорные ссылки на собранные главы, при наличии атрибута id у последних.

сердце
облачко
облачко
облачко
письмо

Отзывы

(0)

captcha
Отправить
Ответ для
>
Сейчас тут пусто. Буть первым (o゚v゚)ノ