Как извлечь адрес электронной почты из названия компании - PullRequest
0 голосов
/ 20 июня 2020

У меня есть файл Excel с названием компании и адресом компании (около 70 тыс. Компаний). Я хочу извлечь адрес электронной почты этой компании с помощью парсера в python. Например, если мы ищем компанию APPLE в Google, мы можем найти идентификатор электронной почты этой компании, например, чтобы найти идентификаторы электронной почты компаний, перечисленных в файле. Итак, есть ли какая-либо библиотека или есть ли какая-нибудь для извлечения идентификатора электронной почты?

например, если я ищу в google manzoor export вот результат введите описание изображения здесь

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

1 Ответ

1 голос
/ 21 июня 2020

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

  1. Создание запроса

Почтальон - полезный инструмент для тестирования вашего запроса на намеченную цель и проверки того, что он работает должным образом. На мой взгляд, он предлагает лучшую среду, чем вкладка сети в веб-браузере.

В этом случае я скопировал URL результата поиска для manzoor export в Postman, удалил ненужные параметры и отправил запрос GET. Убедившись, что это сработало, я построил запрос в синтаксисе запросов:

session = Session()
session.head('https://www.google.com/')

def google_search(input_string):
    response = session.get(
        url = 'https://www.google.com/search',
        params = {
          "q": input_string
        }
    )
    return response
1015 Причина, по которой я избегаю этого здесь, заключается в том, что в настоящее время я предпочитаю более простую альтернативу, которая также более эффективна: l xml. Как только вы познакомитесь с его синтаксисом, вы поймете, насколько он мощный.

Еще один полезный инструмент - форматировщик HTML, например этот , который помогает вам гораздо быстрее находить интересующие атрибуты.

def get_email(response):
  tree = html.fromstring(response.content)
  search_results = tree.xpath("//div[@class='BNeawe s3v9rd AP7Wnd']")
  for index, search_result in enumerate(search_results):
    headings = search_result.xpath("./text()")
    for idx, heading in enumerate(headings):
      if "\nEmail: " == heading:
        r = re.compile(".*@.*")
        text = tree.xpath("//div[@class='BNeawe s3v9rd AP7Wnd']['+index+']/span['+idx+']/text()")
        return list(filter(r.match, text))[0]
  return None 

PS Вы можете существенно улучшить эту функцию, если потратите больше времени, чем я.

Последние штрихи

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

from requests import Session
from lxml import html
import re
import csv
import os

session = Session()
session.head('https://www.google.com/')

def google_search(input_string):
    response = session.get(
        url = 'https://www.google.com/search',
        params = {
          "q": input_string
        }
    )
    return response

def get_email(response):
  tree = html.fromstring(response.content)
  search_results = tree.xpath("//div[@class='BNeawe s3v9rd AP7Wnd']")
  for index, search_result in enumerate(search_results):
    headings = search_result.xpath("./text()")
    for idx, heading in enumerate(headings):
      if "\nEmail: " == heading:
        r = re.compile(".*@.*")
        text = tree.xpath("//div[@class='BNeawe s3v9rd AP7Wnd']['+index+']/span['+idx+']/text()")
        return list(filter(r.match, text))[0]
  return None 

def save_email(email):
  with open("output.csv", 'a+') as f:
    csv_columns = ["Company name", "Email"]
    writer = csv.writer(f)
    if os.stat("output.csv").st_size == 0:
      writer.writerow(csv_columns)
    writer.writerow([company_name, email])

company_name = "manzoor exports"
input_string = company_name.replace(' ', '+')

response = google_search(input_string)
if response.status_code == 200:
  email = get_email(response)
  save_email(email)

Есть еще два что осталось сделать:

  • Вы должны настроить функцию, которая загружает ваш набор данных Excel. Я предлагаю сохранить ваш файл Excel в формате CSV и загрузить его через модуль csv.
  • Google наверняка не позволит вам отправлять множество запросов одновременно. Вот почему лучше ограничивать ваши запросы с помощью модуля time.
...