Вот несколько простых рекомендаций по созданию инструмента для очистки веб-страниц с нуля, используя ваш в качестве примера:
- Создание запроса
Почтальон - полезный инструмент для тестирования вашего запроса на намеченную цель и проверки того, что он работает должным образом. На мой взгляд, он предлагает лучшую среду, чем вкладка сети в веб-браузере.
В этом случае я скопировал 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
.