LinkedIn как все остальные социальные сети пытается защитить информацию от веб-скрэйпинга, но тем не менее всё еще остаются способы её автоматизированного сбора и обработки. Сегодня мы поговорим о том, как достать HTML с информацией обо всех вакансиях, на которые вы откликнулись и экспортировать его в таблицу эксель.
На выходе мы получим файл со следующими столбцами:
- Название вакансии (Job Title)
- Адрес страницы вакансии (URL of the job offer page)
- Название компании (Company Name)
- Адрес страницы компании (URL of the Company page)
- Город (Location)
- Когда была подана и была ли просмотрена ваша заявка (Time you applied for the job (... ago))
Достаем HTML
Для начало нам потребуется открыть страницу https://www.linkedin.com/jobs/tracker/applied/ и прокрутить вниз настолько далеко, насколько позволит LinkedIn. Когда мы прогрузили страницу нас будет ждать сюрприз - если мы попытаемся сохранить страницу как HTML или нажать CTRL+U то файл будет содержать непонятную кашу вместо нужных нам HTML тегов. К счастью есть способ обойти: правый клик -> показать код элемента -> копировать внешний HTML -> вставить в новый текстовый файл.
HTML в XLSX
Всё, что нам осталось сделать - запустить вот этот код и на выходе получить файл Excel со всей информацией со страницы:
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np
# Path to input file
in_file = "C:/input.txt"
f = open(in_file, "r", encoding="utf8")
soup = BeautifulSoup(f.read())
JobPostings = soup.find_all('div',class_="display-flex p0 flex-wrap ember-view")
print("Postings "+str(len(JobPostings)))
job_titles, company_names, loc,app_times = [],[],[],[]
jobs, jobURLs = [],[]
companyNames, companyURLs, locs,app_time = [],[],[],[]
df = pd.DataFrame()
for JobPosting in JobPostings:
job_titles = JobPosting.find_all("a", class_="jobs-job-card-content__title ember-view")
jobs.append(job_titles[0].string)
jobURLs.append('https://linkedin.com'+job_titles[0]['href'])
company_names= JobPosting.find("a", class_="t-black jobs-job-card-content__company-name t-14 t-normal ember-view")
if company_names!=None:
companyNames.append(company_names.string)
companyURLs.append('https://linkedin.com'+company_names['href'])
else:
companyNames.append("NA")
companyURLs.append("NA")
loc=JobPosting.find('span', class_="t-12 t-black--light")
if loc!=None:
locs.append(loc.string)
else:
locs.append("NA")
app_time=JobPosting.find('span', class_=["t-bold t-black t-black--light","jobs-job-card-content__bullet"])
text=""
for i in app_time:
text = text +" "+ i.string
app_times.append(text)
print(len(app_times))
df['Job Title'] = np.array(jobs)
df['Job URL'] = np.array(jobURLs)
df['Company Name'] = np.array(companyNames)
df['Company URL'] = np.array(companyURLs)
df['Locations'] = np.array(locs)
df['AppTime'] = np.array(app_times)
print(df)
# Where to put excel file
df.to_excel("C:/output.xlsx")