Tablo verileri (iframe) içeren bir web sitesinden öğeler ayrıştırılamıyor
href
Bir iş web sitesinin DOM'sinden öznitelikleri ayrıştırmaya çalışıyoruz . href
Her iş için bir tane almak istiyoruz .
Genellikle CSS yollarını kullanırız ve bunları Selenium'un find_elements_by_cssyöntemine geçiririz .
Ne yazık ki, SelectorGadget tarayıcı eklentisinin bize bir CSS yolu sağlamada sorun yaşadığını fark ettik . Google Chrome'u kullanarak bir CSS yolu kullanmaya başladık (ctrl + shift + c). Chrome bir yol çıkarabilir, ancak ne Selenium ne de BeautifulSoup bu yollarla çalışamaz.
Öğeleri farklı sınıflar ve etiketler kullanarak çıkarmaya yönelik birçok başarısız denemeden sonra, yaklaşımımızda veya web sitesinde tamamen yanlış bir şey olduğuna inanıyoruz. Selenium ve BeautifulSoup tarafından istenen öğelerin herhangi bir nedenle ayrıştırılmasının imkansız olduğunu varsayıyoruz? DOM'daki iframe
etiketler bir hata kaynağı olabilir mi (bu SO sorusuna bakın )? Burada ayrıştırmanın başarısız olmasına neden olan nedir ve bu sorunu aşmanın bir yolu var mı? Web sitesiyle ilgili bir sorun kaynağı, Seçici Gadget’ın neden ilk başta bir yol bulamadığını da açıklayabilir. Vardığımız sonuç, href
ihtiyacımız olan öznitelikleri çıkarmak için normal ifadeler kullanmak olacaktır . Bu yalnızca son çare olabilir.
Alman-hoparlörler için, nota thatthere hedef elemanları bir yazım hatasıdır edin: <div class="stellenagebot">
. Lütfen bunlarla kafanızın karışmasına izin vermeyin (bizim yaptığımız gibi).
BeautifulSoup ile şans yok:
import re
import requests
from bs4 import BeautifulSoup
url = 'https://www.artemiskliniken.de/Karriere/%C3%84rzte/'
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
print(soup.prettify())
# Out: ...
#<div class="col-md-4 wow fadeInUp">
# <div class="stellenagebot">
# <h3>
# Facharzt (m/w/d) für Augenheilkunde in Voll- oder Teilzeit
# </h3>
# <h4>
# Erfurt
# </h4>
# <a class="btn btn-default" href="/Stellenangebot/Facharzt_Augenheilkunde_Erfurt/">
# Mehr
# </a>
# </div>
#</div>
#<div class="col-md-4 wow fadeInUp">
# <div class="stellenagebot">
# <h3>
# Facharzt (m/w/d) für Augenheilkunde in Voll- oder Teilzeit
# </h3>
# <h4>
# Eschwege
# </h4>
# <a class="btn btn-default" href="/Stellenangebot/Facharzt_Augenheilkunde_Eschwege/">
# Mehr
# </a>
# </div>
#</div>
# ...
print(soup.find_all('.stellenagebot'))
# Out: []
print(soup.find_all(string=re.compile("Stellenangebot")))
# ['Stellenangebote Facharzt für Augenheilkunde und Karrierewege für Ärzte', '<h3>Zur Verstärkung unseres Teams suchen wir:</h3>\n\n<p class="hyphenate" lang="de"> </p>\n\n<div id=\'jobauflistung\' class=\'row\'><div class=\'col-md-4 wow fadeInUp\'><div class="stellenagebot">\n<h3>Facharzt (m/w/d) für Augenheilkunde in Voll- oder Teilzeit</h3>\n\n<h4>Aachen</h4>\n<a class="btn btn-default" href="/Stellenangebot/Facharzt_Augenheilkunde_Aachen/">Mehr</a></div></div><div class=\'col-md-4 wow fadeInUp\'><div class="stellenagebot">\n<h3>Facharzt (m/w/d) fü
# ...
# ></div>\n</div>\n</div>\n</div>\n</footer>\n</div><!-- AUF ALLEN SEITEN IN DEN BODY-TAG EINFÜGEN ']
print(len(soup.find_all(string=re.compile("Stellenangebot"))))
# Out: 2
Selenium ile şansınız yok:
from selenium import webdriver
from job_scraper.configuration import CHROMEDRIVER_VERSION, ROOT_PATH, \
CHROME_OPTIONS
driver = webdriver.Chrome(
ROOT_PATH / f'assets/chrome_drivers/{CHROMEDRIVER_VERSION}',
options=CHROME_OPTIONS
)
driver.maximize_window()
driver.get(url)
driver.find_elements_by_css_selector('.stellenagebot')
# Out: []
Yanıtlar
Aradığınız öğe içeride comments
. Değeri elde etmek için önce bu etiket bilgisine sahip olmanız ve ardından dizeye dönüştürmeniz ve ardından tekrar ayrıştırmanız gerekir.
from bs4 import Comment
import requests
url = 'https://www.artemiskliniken.de/Karriere/%C3%84rzte/'
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
#Capture Comments element
comments = soup.find_all(text=lambda text:isinstance(text, Comment))
Newsoup = BeautifulSoup(''.join(comments), 'html.parser')
for item in Newsoup.select('[href*="Stellenangebot"]'):
print(item['href'])
Çıktı:
/Stellenangebot/Facharzt_Augenheilkunde_Aachen/
/Stellenangebot/Facharzt_Augenheilkunde_Bad_Berleburg/
/Stellenangebot/Facharzt_Augenheilkunde_Bad_Hersfeld/
/Stellenangebot/Weiterbildungsarzt_Augenheilkunde_Beckum/
/Stellenangebot/Facharzt_Augenheilkunde_Beckum/
/Stellenangebot/Weiterbildungsarzt_Augenheilkunde_Dieburg/
/Stellenangebot/Facharzt_Augenheilkunde_Dieburg /
/Stellenangebot/Facharzt_Augenheilkunde_Dillenburg/
/Stellenangebot/Facharzt_Augenheilkunde_Duisburg/
/Stellenangebot/Facharzt_Augenheilkunde_Erfurt/
/Stellenangebot/Facharzt_Augenheilkunde_Eschwege/
/Stellenangebot/Facharzt_Augenheilkunde_Frankfurt/
/Stellenangebot/Facharzt_Augenheilkunde_Helmstedt/
/Stellenangebot/Weiterbildungsarzt_Augenheilkunde_Heppenheim/
/Stellenangebot/Facharzt_Augenheilkunde_Herborn/
/Stellenangebot/Facharzt_Augenheilkunde_Hoyerswerda/
/Stellenangebot/Facharzt_Augenheilkunde_Koeln/
/Stellenangebot/Facharzt_Anaesthesie/
/Stellenangebot/Weiterbildungsarzt_Augenheilkunde_Leverkusen/
/Stellenangebot/Facharzt_Augenheilkunde_Limburg/
/Stellenangebot/Facharzt_Augenheilkunde_Mainz/
/Stellenangebot/Facharzt_Augenheilkunde_Marburg/
/Stellenangebot/Facharzt_Augenheilkunde_Melsungen/
/Stellenangebot/Facharzt_Augenheilkunde_Moers/
/Stellenangebot/Weiterbildungsarzt_Augenheilkunde_Moers/
/Stellenangebot/Facharzt_Augenheilkunde_Moerfelden/
/Stellenangebot/Facharzt_Augenheilkunde_Muehlhausen/
/Stellenangebot/Facharzt_Augenheilkunde_Isenburg/
/Stellenangebot/Weiterbildungsarzt_Augenheilkunde_Oberhausen/
/Stellenangebot/Facharzt_Augenheilkunde_Oberhausen/
/Stellenangebot/Facharzt_Augenheilkunde_Obertshausen/
/Stellenangebot/Facharzt_Augenheilkunde_Oberursel/
/Stellenangebot/Facharzt_Augenheilkunde_Offenbach/
/Stellenangebot/Weiterbildungsarzt_Augenheilkunde_Offenbach/
/Stellenangebot/Facharzt_Augenheilkunde_Ruesselsheim/
/Stellenangebot/Facharzt_Augenheilkunde_Salzkotten/
/Stellenangebot/Facharzt_Augenheilkunde_Wetzlar/
/Stellenangebot/Facharzt_Augenheilkunde_Wiesbaden/