#python #html #class #web-scraping #beautifulsoup
Вопрос:
import requests
from bs4 import BeautifulSoup
import numpy as np
import re
import json
title = []
pages = np.arange(1,13)
for page in pages:
url = 'https://www.jobs.ch/en/vacancies/?page=' str(page) 'amp;term=python web'
print(url)
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
jobs = soup.find_all('a', class_='sc-hGPAah Link-sc-1vy3ms6-1 jegSWD', href=True, title=True)
for job in jobs:
job_title = job['title']
print(job_title)
title.append(job_title)
job_half_url = job['href']
job_full_url = 'https://www.jobs.ch' str(job_half_url)
print(job_full_url)
data = re.search(r"__INIT__ = ({.*})", requests.get(job_full_url).text).group(1)
data = json.loads(data)
# print(json.dumps(data, indent=4))
for j in data["lists"]["jobs"].values():
soup2 = BeautifulSoup(j["template"], "html.parser")
# print(soup2)
for t in soup2.find_all(class_="col-xs-12 col-md-9 col-md-push-3"):
desc.append(t.get_text(strip=True, separator="n"))
print(t.get_text(strip=True, separator="n"))
Я пытаюсь очистить описание страницы. но каждая страница меняет имя класса div.
в строке для t в soup2.найдите все(class_ = «здесь меняется имя»):
Комментарии:
1. Да, это обычная мера по борьбе с соскабливанием. Вам нужно будет полагаться на что-то другое, кроме имен классов, или посмотреть, есть ли на веб-сайте API.
Ответ №1:
Используйте атрибуты/типы стабильного вида и их взаимосвязь, например
print(soup2.select_one('.content-row > div:nth-child(1)').get_text(strip=True, separator="n"))
Здесь я полагаюсь на отношение дочернего div к более стабильному родительскому классу.