Python - веб-соскоб с использованием HTML-тегов - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь почистить веб-страницу, чтобы перечислить вакансии, размещенные в URL: https://careers.microsoft.com/us/en/search-results?rk=l-hyderabad

См. Изображение для получения подробной информации о проверке веб-страницы. Веб-осмотр.

.

При просмотре веб-страницы наблюдается следующее:

  1. Каждое перечисленное задание находится в формате HTML li с class = "jobs-list-item". Ли содержит следующие html-тег и данные в родительском Div в li

    data-ph-at-job-title-text = "Программный инженер II", данные фот-на-работа-категория-текст = «Инжиниринг», данные тела-на-работе-пост-дата-текст = "2018-03-19T16: 33: 00".

  2. 1-й дочерний элемент Div в родительском элементе Div с class = "information" имеет HTML с URL HREF = "https://careers.microsoft.com/us/en/job/406138/Software-Engineer-II"

  3. 3-й ребенок Div с class = "description au-target" в родительском Div имеет краткое описание работы

Мое требование - получить нижеприведенную информацию для каждой работы

  1. Должность
  2. Категория работы
  3. Дата вакансии
  4. Время поста работы
  5. URL задания
  6. Краткое описание работы

Я пытался следовать коду Python, чтобы очистить веб-страницу, но не смог извлечь необходимую информацию. (Пожалуйста, игнорируйте отступ, показанный в коде ниже)

import requests
from bs4 import BeautifulSoup
def ms_jobs():
url = 'https://careers.microsoft.com/us/en/search-results?rk=l-hyderabad'
resp = requests.get(url)

if resp.status_code == 200:
print("Successfully opened the web page")
soup = BeautifulSoup(resp.text, 'html.parser')
print(soup)
else:
print("Error")

ms_jobs()

1 Ответ

0 голосов
/ 25 июня 2018

Если вы хотите сделать это с помощью запросов, вам нужно перепроектировать сайт. Откройте инструменты разработчика в Chrome, выберите вкладку сети и заполните форму.

Это покажет вам, как сайт загружает данные. Если вы покопаетесь на сайте, то увидите, что он захватывает данные, выполняя POST к этой конечной точке: https://careers.microsoft.com/widgets. Он также показывает полезную нагрузку, которую использует сайт. Сайт использует файлы cookie, поэтому все, что вам нужно сделать, это создать сеанс, в котором хранятся файлы cookie, получить его и скопировать / вставить полезную нагрузку.

Таким образом, вы сможете извлечь те же самые json-данные, которые выбирает javascript для динамического заполнения сайта.

Ниже приведен рабочий пример того, как это будет выглядеть. Осталось только разобрать json, как считаете нужным.

import requests
from pprint import pprint

# create a session to grab a cookie from the site
session = requests.Session()
r = session.get("https://careers.microsoft.com/us/en/")

# these params are the ones that the dev tools show that site sets when using the website form
payload = {
    "lang":"en_us",
    "deviceType":"desktop",
    "country":"us",
    "ddoKey":"refineSearch",
    "sortBy":"",
    "subsearch":"",
    "from":0,
    "jobs":"true",
    "counts":"true",
    "all_fields":["country","state","city","category","employmentType","requisitionRoleType","educationLevel"],
    "pageName":"search-results",
    "size":20,
    "keywords":"",
    "global":"true",
    "selected_fields":{"city":["Hyderabad"],"country":["India"]},
    "sort":"null",
    "locationData":{}
}

# this is the endpoint the site uses to fetch json
url = "https://careers.microsoft.com/widgets"
r = session.post(url, json=payload)
data = r.json()
job_list = data['refineSearch']['data']['jobs']

# the job_list will hold 20 jobs (you can se the parameter in the payload to a higher number if you please - I tested 100, that returned 100 jobs
job = job_list[0]
pprint(job)

Приветствие.

...