Автор оригинала: Pankaj Kumar.
Вы когда-нибудь оказывались в ситуации, когда на следующий день у вас экзамен или, возможно, презентация, и вы просматриваете страницу за страницей на странице поиска Google, пытаясь найти статьи, которые могут вам помочь?
В этой статье мы рассмотрим, как автоматизировать этот монотонный процесс, чтобы вы могли направить свои усилия на более эффективные задачи.
Для этого упражнения мы будем использовать Google collaboratory и использовать в нем Scrapy. Конечно, вы также можете установить Scrapy непосредственно в локальную среду, и процедура будет такой же.
Ищете массовый поиск или API?
Приведенная ниже программа является экспериментальной и показывает вам, как мы можем очистить результаты поиска на Python. Но, если вы запустите его массово, скорее всего, брандмауэр Google заблокирует вас. Если вы ищете массовый поиск или создаете какой-то сервис вокруг него, вы можете заглянуть в Zenserp .
Zenzero-это поисковый API Google, который решает проблемы, связанные с очисткой страниц результатов поисковой системы. При очистке страниц результатов поисковой системы вы довольно быстро столкнетесь с проблемами управления прокси-сервером. Zenserp автоматически поворачивает прокси-серверы и гарантирует, что вы получите только действительные ответы.
Это также облегчает вашу работу, поддерживая поиск изображений, поиск покупок, обратный поиск изображений, тенденции и т. Д. Вы можете попробовать это здесь , просто запустите любой результат поиска и посмотрите ответ JSON.
Инициализация лаборатории Google Co
Перейти к https://colab.research.google.com/ и войдите в свою учетную запись Google. Перейдите в меню Файл > Создать новый блокнот. Затем перейдите к этому значку и нажмите. Нажмите на кнопку подтверждения:
Теперь это займет несколько секунд. Затем в области кода введите:
!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, потому что она нам не нужна. Измените имя.
Это имя нашего паука, и вы можете хранить столько пауков, сколько захотите, с различными параметрами. В списке 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")
И вуаля ! Здесь мы снова запускаем паука, и мы получаем только ссылки, связанные с нашим сайтом, а также текстовое описание.
Мы здесь закончили.
Помещая его в фрейм данных
Однако вывод терминала в основном бесполезен. Если вы хотите сделать с этим что-то большее (например, просмотреть каждый веб-сайт в списке или передать их кому-то), вам нужно будет вывести это в файл. Для этого мы будем использовать панды :
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 “:
Извлечение мета-описаний
Мы можем сделать еще один шаг вперед, а также получить доступ к описанию ниже текста:
Поэтому мы изменим функцию синтаксического анализа. Мы используем 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')
Итак, теперь, если мы запустим наш код, мы получим четвертый столбец:
И это все !
Если вы пропустили что-либо из этого, вы можете просто просмотреть весь код здесь: https://github.com/arkaprabha-majumdar/google-crawler
Спасибо, что прочитали. Ознакомьтесь с другими статьями и продолжайте программировать. Овации.