Парсинг веб-сайта id.indeed.com для получения электронной почты компании
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}")
Результат:
Вот и все.