CoderCastrov logo
CoderCastrov
Питон

Парсинг веб-сайта id.indeed.com для получения электронной почты компании

Парсинг веб-сайта id.indeed.com для получения электронной почты компании
просмотров
1 мин чтение
#Питон
Table Of Content

    Для поиска электронной почты компании на id.indeed.com требуется несколько запросов для получения ссылок, сгенерированных веб-сайтом.

    Для начала нам понадобятся некоторые библиотеки Python, которые вы можете установить в своей виртуальной среде Python.

    import bs4
    import requests
    import re
    import json

    В этом проекте, после парсинга HTML, нам нужно получить значение переменной JavaScript с помощью регулярных выражений, а затем обработать это значение для преобразования его в формат JSON.

    Парсинг HTML:

    url = 'https://id.indeed.com/jobs?q=Part+Time+Disability+jobs&l='
    contents = requests.get(url)
    data_parsing = bs4.BeautifulSoup(contents.text, "html.parser")

    Indeed.com имеет JSON, который сохраняется в JavaScript. Мы должны получить значение из переменной job cards.

    window.mosaic.providerData["mosaic-provider-jobcards"]

    Инспектирование элемента на indeed.com:

    Регулярное выражение:

    pattern = re.compile(r"window.mosaic.providerData\[\"mosaic-provider-jobcards\"]=.*;")
    string = None
    for item in pattern.findall(scripts.get_text(), re.DOTALL):
        string = item

    Преобразование в JSON:

    string = re.sub('window.mosaic.providerData\[\"mosaic-provider-jobcards\"]=|;', '', string)
    
    stud_obj = json.loads(string)

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

    for results in stud_obj["metaData"]["mosaicProviderJobCardsModel"]["results"]:
    
        contents = requests.get("https://id.indeed.com"+results['link'])
        new_url = None
        mail = None
        if contents.status_code == 200:
            if contents.history:
                new_url = contents.url
            # print(new_url)
            contents = requests.get(new_url)
            if contents.status_code == 200:
                data_parsing = bs4.BeautifulSoup(contents.text, "html.parser")
                link = data_parsing.find("div", {"id": "originalJobLinkContainer"})
                tag = link.find('a')
                link_ori = tag.get('href')
                contents = requests.get(link_ori)
                from_url = None
                if contents.history:
                    from_url = contents.url
                contents = requests.get(from_url)
                data_parsing = bs4.BeautifulSoup(contents.text, "html.parser")
                # print(data_parsing)
    
                mail = re.findall(r'[\w.+-]+@[\w-]+\.[\w.-]+', str(data_parsing))
                # twitter = mail = re.findall (r'(?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9-_]+)', str(data_parsing))
        print(f"Компания: {results['company']}, электронная почта: {mail}")

    Результат:

    Вот и все.