Python: как соскрести информацию с сайта? - PullRequest
0 голосов
/ 22 января 2020

Я хотел бы получить информацию об архитекторах с этого сайта

https://www.sia.ch/en/membership/member-directory/m/207778/

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

Это то, что я пытаюсь сделать, но я не могу извлечь такую ​​информацию.

Я хотел бы получить вывод, подобный следующему:

image

Ответы [ 2 ]

1 голос
/ 22 января 2020

Вам придется использовать Selenium, чтобы javascript отображал некоторые детали. Тогда вам нужно сделать небольшую манипуляцию. Это вы здесь, и оно включает в себя заголовок индивидуума ('Mr.')

import pandas as pd
from selenium import webdriver

url = 'https://www.sia.ch/en/membership/member-directory/m/207778/'
driver = webdriver.Chrome('C:/chromedriver_win32/chromedriver.exe')
driver.get(url)

html = driver.page_source
html = str(html).replace('<br />', '::')
df = pd.read_html(html)[0].iloc[[0,2],1]

contact = []
for x in df.tolist():
    #x = df.tolist()[0]
    alpha = x.split('::')
    alpha = [ a.strip() for a in alpha if a != '' ]
    contact.append(alpha)

contact = contact[0] + contact[1]
driver.close()

Вывод:

print (contact)
['Mr', 'Pierluigi A Marca', 'Dipl. Arch. ETH/SIA', 'Sihlquai 244', '8005 Zürich', '+41 442734340', 'info@bamarch.ch']
0 голосов
/ 22 января 2020

Вы можете сделать это без селена. Я не буду предоставлять код для декодирования (по юридическим причинам), но вот некоторые замечания, как вы можете это сделать:

  1. расшифровка js код:
        // init hide contact
        jQuery(".contact-data").html(Aes.Ctr.decrypt(
        jQuery(".contact-data").data("contact"),
        jQuery(".secr").data("secr"), 256));
    });
Как видите, это aes-ctr. Здесь закодированная строка: //div[@class='contact-data']/@data-contact и ключ aes здесь: //div[@class='secr']/@data-secr

Ключ генерируется при каждом запросе.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...