Вы можете выполнить код, нажав кнопку Выполнить в верхней части этой страницы и выбрав Выполнить на Binder. Вы можете внести изменения и сохранить собственную версию блокнота в Jovian, выполнив следующие ячейки:
!pip install jovian --upgrade --quiet
import jovian
# Execute this to save new versions of the notebook jovian.commit(project="web-scrapping-project")
<IPython.core.display.Javascript object> [jovian] Updating notebook "pamyaola/web-scrapping-project" on https://jovian.com[0m [jovian] Committed successfully! https://jovian.com/pamyaola/web-scrapping-project[0m 'https://jovian.com/pamyaola/web-scrapping-project'
Установите и импортируйте необходимые библиотеки
!pip install requests --upgrade --quiet
!pip install beautifulsoup4 --upgrade --quiet
import requests
from bs4 import BeautifulSoup
Используйте библиотеку requests
для загрузки веб-страниц
- Проверьте исходный HTML-код веб-сайта и определите правильные URL-адреса для загрузки.
- Загрузите и сохраните веб-страницы локально, используя библиотеку запросов.
- Создайте функцию для автоматизации загрузки по разным темам/поисковым запросам.
Используйте BeautifulSoup
для разбора
- Разбирайте и исследуйте структуру загруженных веб-страниц с помощью Beautiful Soup.
#function to get all tags of all the jobs def get_job_page(topic): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 YaBrowser/19.6.1.153 Yowser/2.5 Safari/537.36'} base_url = 'https://www.quikr.com/jobs/' + topic + '+zwqxj1466534506' # The contents of the web page can be accessed using the .text property of the response. response = requests.get(base_url, headers=headers) if not response.ok: print('status :', response.status_code) raise Exception('page not found: '+base_url) doc = BeautifulSoup(response.text) div_tags = doc.find_all('div',class_='job-card apply-block adImpression-click-event adImpression-event-class1') return div_tags
all_div_tags = [get_job_page(job) for job in job_posts]
Доступ к заданиям
Каждое задание связано с <div_tags>
с class_name ="job-card apply-block adImpression-click-event adImpression-event-class1"
, как показано на изображении ниже.
Используйте Beautiful Soup для извлечения информации
- Используйте правильные свойства и методы для извлечения необходимой информации.
- Создайте функции для извлечения со страницы в списки и словари.
#function to get all data from all the jobs tags def parse_data(article): a_job_title = article.find('a',class_='job-title') monthly_income = article.find('div',class_='perposelSalary attributeVal') Job_Type_tags = article.find('div',class_='m-salary col-lg-3 col-md-6 col-xs-6 nopadding') Job_Type = Job_Type_tags.find('div',class_='attributeVal') Company_tags = article.find_all('div',class_='salary col-lg-3 col-md-6 col-xs-6 nopadding') Company_tag = Company_tags[1].find('div',class_='inlineBlock mlAuto attributeSection') Company = Company_tag.find_all('div') Experience_tags = article.find('div',class_='lstExperience col-lg-3 col-md-6 col-xs-6 nopadding') Experience_tag = Experience_tags.find('div',class_='inlineBlock lineH mlAuto') Experience = Experience_tag.find_all('div') city_tag = article.find('span',class_='city') city = city_tag.find('b') job_dict = { 'job_title':a_job_title.text.replace(',',' '), 'monthly_income':monthly_income.text.replace(',',''), 'Job_Type':Job_Type.text, 'Company':Company[1].text, 'Experience':Experience[1].text, 'city':city.text } return job_dict
all_jobs_done = [] for all_tg in all_div_tags: list_of_dict = [parse_data(tg) for tg in all_tg] all_jobs_done = all_jobs_done + list_of_dict
len(all_jobs_done)
122
Создайте файл(ы) CSV с извлеченной информацией
- Создайте функции для сквозного процесса загрузки, анализа и сохранения файлов CSV.
- Выполните функцию с различными входными данными, чтобы создать набор данных файлов CSV.
- Прикрепите файлы CSV к своей записной книжке, используя jovian.commit.
def write_csv(items, path): # Open the file in write mode with open(path, 'w') as f: # Return if there's nothing to write if len(items) == 0: return # Write the headers in the first line headers = list(items[0].keys()) f.write(','.join(headers) + '\n') # Write one item per line for item in items: values = [] for header in headers: values.append(str(item.get(header, ""))) f.write(','.join(values) + "\n")
write_csv(all_jobs_done , 'jobs.csv')
Чтение CSV file
и создание фрейма данных с использованием библиотеки Pandas
!pip install pandas --upgrade --quiet
import pandas as pd
jobs_df = pd.read_csv("jobs.csv")
jobs_df
jovian.commit(files=['jobs.csv'])
<IPython.core.display.Javascript object> [jovian] Updating notebook "pamyaola/web-scrapping-project" on https://jovian.com[0m [jovian] Uploading additional files...[0m [jovian] Committed successfully! https://jovian.com/pamyaola/web-scrapping-project[0m 'https://jovian.com/pamyaola/web-scrapping-project'
Краткое содержание
вот что мы рассмотрели в этом проекте:
- Загрузите веб-страницу с помощью запросов
- Разберите исходный код HTML, используя красивый суп
- Извлечь job_title, ежемесячный доход, тип работы, компанию, опыт, город со страницы
- Компиляция извлеченной информации в списки и словари Python
- Извлечение и объединение данных с нескольких страниц
- Сохраните извлеченную информацию в файл CSV.
- Прочитайте файл CSV как фрейм данных panda.
Будущая работа
- Мы можем анализировать данные, чтобы получить самые требовательные рабочие места в настоящее время
- Мы можем очистить страницу вакансий, чтобы получить дополнительную информацию о различных вакансиях.
- Рекомендация кандидатам подходящей работы в соответствии с минимальными навыками, которые они приобретают.
Рекомендации
- Ссылка на учебник по парсингу веб-страниц с помощью Python https://jovian.ai/learn/zero-to-data-analyst-bootcamp/assignment/project-web-scraping-with-python
- Ссылка на документацию и сторителлинг https://jovian.ai/learn/zero-to-data-analyst-bootcamp/lesson/documentation-and-storytelling
- Ссылка на документацию BeautifulSoup https://www.crummy.com/software/BeautifulSoup/bs4/doc/
- Ссылка на документацию по запросам https://requests.readthedocs.io/en/latest/