Почему я все еще получаю результаты в виде HTML с помощью Beautifulsoup? - PullRequest
0 голосов
/ 13 октября 2019

Я пишу простой скребок для объявлений о работе, но моя функция extract_fulltext, которая отвечает за предоставление всего описания работы, однако, я все еще получил html tags в качестве ответа, так что в этом случае. это дает мне raise InvalidSchema("No connection adapters were found for '%s'" % url), и полная ошибка выпуска https://gist.github.com/SkyBulk/c6df488ef53ae6bc62c86670cfbd09ec

def extract_fulltext(url):
    html = requests.get(url)

    job_ids = ','.join(re.findall(r"jobKeysWithInfo\['(.+?)'\]", html.text))
    ajax_url = 'https://www.indeed.com/rpc/jobdescs?jks=' + urllib.parse.quote(job_ids)
    ajax_content = requests.get(ajax_url)
    soup = BeautifulSoup(ajax_content.text,"lxml")
    text = soup.getText()
    return soup

response = requests.get(url, headers=self.headers)
data = response.text
soup = get_soup(data)
html = soup.find_all(
    name="div", attrs={"class": "row"})
for page in html:
    print(page)
    prefix = ['30', 'monaten', 'meses', 'luni', 'mois', 'month', 'months', 'maanden',
              'mesi', 'mies.', 'm\u00e5nader', '\u043c\u0435\u0441\u044f\u0446\u0435\u0432']
    date_str = extract_date(page)
    s_date = date_str.replace('+', '')
    match = [prefix_match for prefix_match in prefix if prefix_match in s_date]
    if len(match) > 0:
        pass
    elif "NOT_FOUND" in s_date:
      pass
    else:
        self.data_extracted['jobs'].append({
            'job_title': extract_job_title(page),
            'company': extract_company(page),
            'city': extract_location(page),
            'date': extract_date(page),
            'cleared': extract_fulltext(page),
            'url':  [self.urls[country] + extract_link(page)]
        })

Я ожидаю вывод {"job_id": "description"}, но фактический вывод - ошибка

Ответы [ 2 ]

1 голос
/ 13 октября 2019

Вы можете сделать свою концепцию в зависимости от этого решения

import requests,json
from bs4 import BeautifulSoup

req = requests.get('https://www.indeed.com/rpc/jobdescs?jks=80635306093cf18a,7496998d9ee18bdc')
data = json.loads(req.text)
for id in data.keys():
    soup = BeautifulSoup(data[id])
    print(soup.text)

Демо: Здесь

0 голосов
/ 13 октября 2019

Просто используйте .get_text():

def extract_fulltext(url):
    html = requests.get(url)

    job_ids = ','.join(re.findall(r"jobKeysWithInfo\['(.+?)'\]", html.text))
    ajax_url = 'https://www.indeed.com/rpc/jobdescs?jks=' + urllib.parse.quote(job_ids)
    ajax_content = requests.get(ajax_url)
    soup = BeautifulSoup(ajax_content.text,"lxml")
    text = soup.get_text()
    return text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...