Рубрики
Без рубрики

Как очистить результаты поиска Google с помощью Python Scrapy

Вы когда-нибудь оказывались в ситуации, когда на следующий день у вас экзамен или, возможно, презентация, и вы просматриваете страницу за страницей

Автор оригинала: Pankaj Kumar.

Вы когда-нибудь оказывались в ситуации, когда на следующий день у вас экзамен или, возможно, презентация, и вы просматриваете страницу за страницей на странице поиска Google, пытаясь найти статьи, которые могут вам помочь?

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

Для этого упражнения мы будем использовать Google collaboratory и использовать в нем Scrapy. Конечно, вы также можете установить Scrapy непосредственно в локальную среду, и процедура будет такой же.

Ищете массовый поиск или API?

Приведенная ниже программа является экспериментальной и показывает вам, как мы можем очистить результаты поиска на Python. Но, если вы запустите его массово, скорее всего, брандмауэр Google заблокирует вас. Если вы ищете массовый поиск или создаете какой-то сервис вокруг него, вы можете заглянуть в Zenserp .

Zenzero-это поисковый API Google, который решает проблемы, связанные с очисткой страниц результатов поисковой системы. При очистке страниц результатов поисковой системы вы довольно быстро столкнетесь с проблемами управления прокси-сервером. Zenserp автоматически поворачивает прокси-серверы и гарантирует, что вы получите только действительные ответы.

Это также облегчает вашу работу, поддерживая поиск изображений, поиск покупок, обратный поиск изображений, тенденции и т. Д. Вы можете попробовать это здесь , просто запустите любой результат поиска и посмотрите ответ JSON.

Инициализация лаборатории Google Co

Перейти к https://colab.research.google.com/ и войдите в свою учетную запись Google. Перейдите в меню Файл > Создать новый блокнот. Затем перейдите к этому значку и нажмите. Нажмите на кнопку подтверждения:

Монтируйте Диск В Colab

Теперь это займет несколько секунд. Затем в области кода введите:

!pip install scrapy

Это установит Scrapy в Google colab, так как он не встроен в него. Затем мы импортируем наши пакеты:

import scrapy
import pandas

Помните, как вы монтировали диск? Да, теперь перейдите в папку под названием “диск” и перейдите к записным книжкам Colab. Щелкните по нему правой кнопкой мыши и выберите Копировать путь .

Помните, как вы монтировали диск? Да, теперь перейдите в папку под названием “диск” и перейдите к записным книжкам Colab. Щелкните по нему правой кнопкой мыши и выберите || Копировать путь || .

%cd "/content/drive/My Drive/Colab Notebooks/"

Теперь мы готовы инициализировать ваш проект scrapy, и он будет сохранен на нашем диске Google для дальнейшего использования.

Войдите в редактор кода:

!scrapy startproject google_crawler

Это создаст скрап-репо проекта в ваших записных книжках colab. Если вы не смогли следовать дальше, или где-то произошла ошибка, и проект хранится где-то в другом месте, не беспокойтесь. Мы можем просто переместить его:

!mv google_crawler "/content/drive/My Drive/Colab Notebooks/"

Как только это будет сделано, мы начнем строить нашего паука.

Создание паука-питона

Откройте репо google_crawler. Внутри вы найдете папку ” spiders” . Здесь мы поместим наш новый код паука.

Итак, создайте новый файл здесь, нажав на папку, и назовите его. Мы начинаем с импорта пакетов:

import scrapy 
from scrapy.linkextractors import LinkExtractor
import pandas as pd

На данный момент вам не нужно менять имя класса. Давайте немного приберемся.

Удалите строку allowed_domains, потому что она нам не нужна. Измените имя.

Удалите строку allowed_domains, потому что она нам не нужна. Измените имя.

Файловая Система Для Scrapy

Это имя нашего паука, и вы можете хранить столько пауков, сколько захотите, с различными параметрами. В списке start_urls мы можем добавить наш поиск Google:

class firstSpider(scrapy.Spider): 
  name = "basic" 
  start_urls = [ 
    "https://www.google.com/search?q=journal+dev"
   ]

Теперь давайте создадим нашу функцию синтаксического анализа и используем наш экстрактор ссылок для извлечения ссылки:

def parse(self, response):
    xlink = LinkExtractor()
    for link in xlink.extract_links(response):
      print(link)

В редакторе кода запустите его с помощью:

!scrapy crawl basic

Мы видим, что здесь больше, чем несколько ссылок, и многие из них в основном Google.com поиск, поэтому мы можем отфильтровать их с помощью условия if :

def parse(self, response):
    xlink = LinkExtractor()
    for link in xlink.extract_links(response):
      if len(str(link))>200 or 'Journal' in link.text:
        print(len(str(link)),link.text,link,"\n")

И вуаля ! Здесь мы снова запускаем паука, и мы получаем только ссылки, связанные с нашим сайтом, а также текстовое описание.

Результаты Поиска Google Успешно Очищены

Мы здесь закончили.

Помещая его в фрейм данных

Однако вывод терминала в основном бесполезен. Если вы хотите сделать с этим что-то большее (например, просмотреть каждый веб-сайт в списке или передать их кому-то), вам нужно будет вывести это в файл. Для этого мы будем использовать панды :

def parse(self, response):
    df = pd.DataFrame()
    xlink = LinkExtractor()
    link_list=[]
    link_text=[]
    for link in xlink.extract_links(response):
      if len(str(link))>200 or 'Journal' in link.text:
        print(len(str(link)),link.text,link,"\n")
        link_list.append(link)
        link_text.append(link.text)
    df['links']=link_list
    df['link_text']=link_text
    df.to_csv('output.csv')

И теперь, если мы запустим это, мы получим выходной файл под названием ” output.csv “:

Вывод Spider Для Поиска Google Журнала Dev

Извлечение мета-описаний

Мы можем сделать еще один шаг вперед, а также получить доступ к описанию ниже текста:

Описание Ниже Поиск Ссылок PNG

Поэтому мы изменим функцию синтаксического анализа. Мы используем response.xpath(//div/text ()), чтобы получить весь текст, присутствующий в теге div . Затем, путем простого наблюдения, я напечатал в терминале длину каждого текста и обнаружил, что те, которые превышают 100, скорее всего, будут описаниями. Поскольку они извлекаются в том же порядке, что и ссылки, у нас нет проблем с их выравниванием:

  def parse(self, response):
    df = pd.DataFrame()
    xlink = LinkExtractor()
    link_list=[]
    link_text=[]
    divs = response.xpath('//div')
    text_list=[]
    for span in divs.xpath('text()'):
      if len(str(span.get()))>100:
        text_list.append(span.get())
    for link in xlink.extract_links(response):
      if len(str(link))>200 or 'Journal'in link.text:
        #print(len(str(link)),link.text,link,"\n")'''
        link_list.append(link)
        link_text.append(link.text)
    for i in range(len(link_text)-len(text_list)):
      text_list.append(" ")
    df['links']=link_list
    df['link_text']=link_text
    df['text_meta'] = text_list
    df.to_csv('output.csv')

Итак, теперь, если мы запустим наш код, мы получим четвертый столбец:

Описание Извлечение Метаданных Div Span Из Css

И это все !

Если вы пропустили что-либо из этого, вы можете просто просмотреть весь код здесь: https://github.com/arkaprabha-majumdar/google-crawler

Спасибо, что прочитали. Ознакомьтесь с другими статьями и продолжайте программировать. Овации.