Проблема с извлечением данных из действительно от BeautifulSoup - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь извлечь описания вакансий для каждого поста с веб-сайта Действительно, но результат не тот, который я ожидал!

Я написал код для получения описания работы. Я работаю с Python 2.7 и последней красивой парой. Когда вы откроете страницу и нажмете название каждой вакансии, вы увидите соответствующую информацию в правой части экрана. Мне нужно извлечь эти описания работы для каждой работы на этой странице. Мой код:

import sys

import urllib2 

from BeautifulSoup import BeautifulSoup

url = "https://www.indeed.com/jobs?q=construction%20manager&l=Houston%2C%20TX&vjk=8000b2656aae5c08"

html = urllib2.urlopen(url).read()

soup = BeautifulSoup(html)

N = soup.findAll("div", {"id" : "vjs-desc"})

print N

Я ожидал увидеть результаты, но вместо этого получил [] как результат. Это потому, что идентификатор не уникален. Если да, то как мне редактировать код?

1 Ответ

0 голосов
/ 14 января 2019

элемент #vjs-desc генерируется javascript, а содержимое - из запроса Ajax. Чтобы получить описание, вам нужно выполнить этот запрос.

# -*- coding: utf-8 -*-

# it easier to create http request/session using this
import requests
import re, urllib
from BeautifulSoup import BeautifulSoup

url = "https://www......"

# create session
s = requests.session()
html = s.get(url).text

# exctract job IDs
job_ids = ','.join(re.findall(r"jobKeysWithInfo\['(.+?)'\]", html))
ajax_url = 'https://www.indeed.com/rpc/jobdescs?jks=' + urllib.quote(job_ids)
# do Ajax request and convert the response to json 
ajax_content = s.get(ajax_url).json()
print(ajax_content)

for id, desc in ajax_content.items():
    print id
    soup = BeautifulSoup(desc, 'html.parser')
    # or try this
    # soup = BeautifulSoup(desc.decode('unicode-escape'), 'html.parser')
    print soup.text.encode('utf-8')
    print('==============================')
...