I'm trying to extract data from an HTML script without success. I'm able to get all the text content of the script that has the data I'm looking for, all I have to do is extract the relevant data.
response = requests.get('https://www.yad2.co.il/item/ajyw4gne', cookies=cookies, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')
more_data = soup.find_all("script")[13]
CodePudding user response:
Note: I think selenium would definitely be the better approach for scraping this site. The function below is meant for sites with far more readable JavaScript (where the target information is conveniently packaged in JSON).
I have a function findObj_inJS
that uses slimit
to parse JavaScript and extract variables and other values. The scripts on this page are not very readable, but if you use the function as below,
jScript = soup.find(lambda s: s.name=='script' and 'window.__NUXT__' in s.text)
jScript = jScript.text if jScript else '0 SCRIPTS CONTAINING "window.__NUXT__"'
jsStr = jScript.replace('class:', 'was_class:').replace('default:', 'was_default:')
jsData = findObj_inJS(jsStr, [
'info_text', 'info_title', 'search_text', 'date_of_entry',
'info_bar_items', 'important_info_items', 'main_title', 'second_title'
], findAll=True, jStrict=False)
then jsData
[as JSON] looks like
{
"info_text": [
"בפרויקט יפו בשדרה .\n\nדירת 4 חדרים מהמגזינים, יפיפייה ומוארת הפונה לגינה פנימית ושקטה.\n\n99 מ\"ר 12 מ\"ר מרפסת, מטבח חדש ומאובזר, סוויטת הורים מפנקת חניה תת קרקעית ומחסן.\n\nלוקיישן מרהיב מרחק הליכה משוק הפשפשים, הנמל, יפו העתיקה ובקרבת תחנת הרכבת הקלה"
],
"info_title": [
"על הנכס"
],
"search_text": [
"דירה דירות למכירה חדרים ב תל אביב יפו , מכללת תל אביב יפו, דקר , חסידי האומות 22 $FurnitureInfo בפרויקט יפו בשדרה .\n\nדירת 4 חדרים מהמגזינים, יפיפייה ומוארת הפונה לגינה פנימית ושקטה.\n\n99 מ\"ר 12 מ\"ר מרפסת, מטבח חדש ומאובזר, סוויטת הורים מפנקת חניה תת קרקעית ומחסן.\n\nלוקיישן מרהיב מרחק הליכה משוק הפשפשים, הנמל, יפו העתיקה ובקרבת תחנת הרכבת הקלה. רון (לשלוח ווטסאפ אם לא זמין) דירה 4 $Floor_text $TotalFloor_text $Amudim_text $Furniture_text $PandorDoors_text מיזוג מעלית חניה $Grating_text גישה לנכים אזור תל אביב יפו $Immediate_text ממ\"ד מרפסת מחסן $sunpatio_text ₪ $Meshupatz_text $Porch_text $yehidatdiur_text במצב שמור הצג רחוב הצג מספר בית מזגן תדיראן עם מחיר, עם תמונה, חניה, הצג רק מושבים וקיבוצים, מעלית, מיזוג, מיזוג, ממ\"ד, מרפסת, מחסן, גישה לנכים, מזגן תדיראן, הצג רחוב, הצג מספר בית 4 חדרים | 111 מ״ר | 8 חסידי האומות 22 , מכללת תל אביב יפו, דקר"
],
"date_of_entry": [
"כניסה גמישה",
"2022-12-28 00:00:00"
],
"info_bar_items": [
"[{\n key: bs,\n title: cF,\n label: I,\n titleWithoutLabel: a$\n},{\n key: dE,\n title: \"קומה 8\",\n label: dD,\n titleWithoutLabel: aF\n},{\n key: \"meter\",\n title: cG,\n label: ip,\n titleWithoutLabel: \"111\"\n},{\n key: \"entrance\",\n title: iq,\n label: h,\n titleWithoutLabel: iq\n}]"
],
"important_info_items": [
"[{\n value: cz,\n key: aR\n},{\n key: \"רחוב\",\n value: dC\n},{\n value: \"8 מתוך 11 \",\n key: dD\n},{\n key: \"מ\\\"ר בנוי\",\n value: \"99\"\n},{\n value: \"לא צוין\",\n key: \"מ\\\"ר גינה\"\n},{\n link_url: \"http:\\u002F\\u002Fhomeprices.yad2.co.il\\u002Fneighborhood\\u002Fתל אביב יפו\\u002Fחסידי האומות-22\",\n key: \"נתוני השכונה\",\n value: \"לחץ כאן\"\n}]"
],
"main_title": [
"דירה למכירה בתל אביב יפו",
"דירה למכירה בתל אביב יפו"
],
"second_title": [
"חסידי האומות 22 מכללת תל אביב יפו, דקר",
"חסידי האומות 22 מכללת תל אביב יפו, דקר"
]
}
I can't read Hebrew, but I feel like at least some of the data you want is in there....