Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 11.04.2022
Сообщений: 22

Парсер 2Gis. Python, Silenium

13.04.2022, 22:24. Показов 2851. Ответов 0

Студворк — интернет-сервис помощи студентам
Здравствуйте, протестируйте у себя в среде. Подскажите, почему неправильный результат. Жутко хочется дописать

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
import csv
from itertools import dropwhile
from lib2to3.pgen2 import driver
from operator import delitem
from re import I
from selenium.webdriver.common.keys import Keys
from stringprep import in_table_a1
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
import random
# import requests
# from bs4 import BeautifulSoup as bs
# import json
 
user_agent = [
    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", 
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", 
    "Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", 
    "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
]
 
option = webdriver.ChromeOptions()
option.add_argument(f"user-agent={random.choice(user_agent)}")
 
driver = webdriver.Chrome(executable_path="C:\\Users\\Shhhn\\OneDrive\\Рабочий стол\\web_menu\\selenium_parser\\chromedriver_win32\\chromedriver.exe", options=option)
 
def scroll(): 
    while True: 
        scroll_down = driver.find_element_by_class_name('_1rkbbi0x')
        if(driver.find_elements_by_class_name('_1x4k6z7')):
            break
        else:
            action = ActionChains(driver)
            action.move_to_element(scroll_down).perform()
            time.sleep(1)
            
def scrap():
    url_item = driver.current_url
    driver.get(url=url_item)
    
def blocks_get(block_page):
    url_link = []
    for item in block_page:
        time.sleep(1)
        item.click()
        url_item = driver.current_url
        url_link.append(url_item)
        time.sleep(1)
        scroll()
    return url_link
 
def next():
    button_next = driver.find_element_by_class_name('_n5hmn94') #вперед
    button_next.click()
 
for i in range(1,): #здесь нужно ввести вместо 98 количество страниц для парсинга
    url = f"https://2gis.ru/moscow/search/%D0%A4%D0%B8%D0%BD%D0%B0%D0%BD%D1%81%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%BA%D0%BE%D0%BD%D1%81%D0%B0%D0%BB%D1%82%D0%B8%D0%BD%D0%B3/rubricId/1236/page/{i}"
    driver.get(url=url)
    time.sleep(2)
    items = driver.find_elements_by_xpath("//div[@class='_1h3cgic']")
    url_links = blocks_get(items)
    next()
 
results_list = []
 
for link_item in url_links:
    driver.get(url=link_item)
    
    try: 
        name = driver.find_element_by_class_name("_oqoid").text.strip()
    except Exception as _error:
         name = None
         
    try:
        work_profession = driver.find_element_by_class_name("_oqoid").text
    except Exception as _error:
        work_profession = None
    
    phone_list = []
    try:
        phones = driver.find_elements_by_xpath("//a[@class='_2lcm958']")
        phone_list.append(str(phones))
    except Exception as _error:
        phone_list = None 
        
    try:
        site = driver.find_element_by_class_name("_1rehek").text
    except Exception as _error:
        site = None
        
    try:
        email = driver.find_element_by_class_name("_2lcm958").text
    except Exception as _error:
        email = None
        
    results_list.append(
         {
             "NAME": name,
             "PHONES": phone_list,
             "SITE": site,
             "WORK": work_profession,
             "EMAIL": email,
             "URL": link_item
         }
     )
    
    time.sleep(random.randrange(1, 3))
 
with open("contact.csv", "w") as file:
    writer = csv.writer(file)
    writer.writerow(
        (
            "Name", 
            "Phones", 
            "Web-site",
            "Work company", 
            "Email", 
            "Link"
        )
    )
    
    for item_info in results_list:
        
        info_name = item_info["NAME"]
        info_phones = item_info["PHONES"]
        info_website = item_info["SITE"]
        info_work_company = item_info["WORK"]
        info_email = item_info["EMAIL"]
        info_url = item_info["URL"]
        
        with open("contact.csv", "w") as file:
            writer = csv.writer(file)
            writer.writerows(
                (info_name, 
                info_phones, 
                info_website,
                info_work_company,
                info_email,
                info_url)
            )
 
time.sleep(10)
driver.close()
driver.quit()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.04.2022, 22:24
Ответы с готовыми решениями:

Парсер Python
Здравствуйте. Всех с наступающим Новым годом Есть код парсера на Python. Ответ от сервера 403. Как узнать в чём причина такого ответа....

Парсер на Python
Здравствуйте. Решил написать простенький парсер на Питоне, но столкнулся с проблемой: не могу вытащить цену с сайта ДНС. Названия и ссылки...

Парсер поисковой системы на Python 3
Всем здравствуйте, решил я тут сделать парсер на Python 3 для поисковика (я выбрал Google) и столкнулся с такой проблемой, что моя...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.04.2022, 22:24
Помогаю со студенческими работами здесь

Как сделать такой парсер на python?
Я смотрел видосы по python requests, но не могу понять, как мне взять заголовок первого сайта из поисковой выдачи? То есть...

Парсер в мобильном приложении на kivy python
Доброго времени суток, уважаемые форумчане. Пишу приложение на kivy, kivymd для инфо сайта, необходимо сделать парсер новостей....

Silenium Firefox передача browser.download.dir не все русские буквы передаются корректно
Добрый день. Нужна помощь. Пытаюсь передать настройки в firefox, browser.download.dir. Если путь полностью на английском все в порядке....

id текстовых полей silenium
Здравствуйте, появилась необходимость чутка оптимизировать свою работу c помощью silenium, но я зашел в тупик, нужно во все текстовые поля...

Парсер hh.ru на Python
Доброго времени суток. У меня при изучении Python возникла проблема, сижу ломаю голову. Парсер должен вытягивать 100 вакансий со страницы,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru