Как извлечь определенные идентификаторы с веб-страницы

Мне нужно провести небольшое исследование рынка недвижимости, а для этого мне нужны цены и другие ценности новых домов.

Так что моя идея состояла в том, чтобы пойти на веб-сайт, где я получить информацию. Перейдите на основной сайт поиска и соскребите все RealEstateID, которые перенаправят меня прямо на отдельные страницы для каждого дома, где я могу извлечь нужную мне информацию.

Моя проблема заключается в том, как мне получить все идентификаторы недвижимости с главной страницы и сохранить их в списке, чтобы я мог использовать их на следующем шаге, чтобы создать с ними URL-адреса для перехода на актуальные сайты.

Я попробовал это с BeautifulSoup, но потерпел неудачу, потому что я не понимаю, как искать определенное слово и извлекать то, что идет после него.

HTML-код выглядит следующим образом:

""realEstateId":110356727,"newHomeBuilder":"false","disabledGrouping":"false","resultlist.realEstate":{"@xsi.type":"search:ApartmentBuy","@id":"110356727","title":"

Поскольку значение «realEstateId» появляется около 60 раз, я хочу всегда очищать число (здесь: 110356727), которое следует за ним, и сохранять его в списке, чтобы я мог использовать его позже.

Редактировать:

    import time
    import urllib.request
    from urllib.request import urlopen
    import bs4 as bs
    import datetime as dt
    import matplotlib.pyplot as plt
    from matplotlib import style
    import numpy as np
    import os
    import pandas as pd
    import pandas_datareader.data as web
    import pickle
    import requests
    from requests import get 
url = 'https://www.immobilienscout24.de/Suche/S-T/Wohnung-Kauf/Nordrhein-Westfalen/Duesseldorf/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/true?enteredFrom=result_list'
        response = get(url)
        from bs4 import BeautifulSoup
        html_soup = BeautifulSoup(response.text, 'html.parser')
        type(html_soup)

        def expose_IDs():
            resp = requests.get('https://www.immobilienscout24.de/Suche/S-T/Wohnung-Kauf/Nordrhein-Westfalen/Duesseldorf/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/true?enteredFrom=result_list')
            soup = bs.BeautifulSoup(resp.text, 'lxml')
            table = soup.find('resultListModel')
            tickers = []
            for row in table.findAll('realestateID')[1:]:
                ticker = row.findAll(',')[0].text
                tickers.append(ticker)
            with open("exposeID.pickle", "wb") as f:
                pickle.dump(tickers, f)
            return tickers

        expose_IDs()
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
831
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что-то вроде этого? В словаре есть 68 ключей, которые являются идентификаторами. Я использую регулярное выражение, чтобы получить тот же скрипт, что и вы, и удалить нежелательный символ, затем загрузить с помощью json.loads и получить доступ к объекту json, как показано на изображении внизу.

import requests
import json
from bs4 import BeautifulSoup as bs
import re

res = requests.get('https://www.immobilienscout24.de/Suche/S-T/Wohnung-Kauf/Nordrhein-Westfalen/Duesseldorf/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/true?enteredFrom=result_list')
soup = bs(res.content, 'lxml')
r = re.compile(r'resultListModel:(.*)')
data = soup.find('script', text=r).text
script = r.findall(data)[0].rstrip(',')
#resultListModel: 
results = json.loads(script)
ids = list(results['searchResponseModel']['entryInformation'].keys())
print(ids)

Идентификаторы:


С момента обновления сайта:

import requests
import json
from bs4 import BeautifulSoup as bs
import re

res = requests.get('https://www.immobilienscout24.de/Suche/S-T/Wohnung-Kauf/Nordrhein-Westfalen/Duesseldorf/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/true?enteredFrom=result_list')
soup = bs(res.content, 'lxml')
r = re.compile(r'resultListModel:(.*)')
data = soup.find('script', text=r).text
script = r.findall(data)[0].rstrip(',')
results = json.loads(script)
ids = [item['@id'] for item in results['searchResponseModel']['resultlist.resultlist']['resultlistEntries'][0]['resultlistEntry']]
print(ids)

эй, я не хочу открывать новую тему, и, поскольку вы так мне помогли в прошлый раз, я подумал, что спрошу вас здесь напрямую. Веб-сайт изменил HTML-код, и «entryInformation» больше нет. У вас есть какое-либо другое решение для изменения кода, чтобы я все еще получал все идентификаторы?

CosmoCramer 03.05.2019 17:39

можно, если быстро. Если это дольше и требует кода и html, лучше открыть новую тему.

QHarr 03.05.2019 17:40

Веб-сайт изменил HTML-код, и «entryInformation» больше нет. У вас есть какое-либо другое решение для изменения кода, чтобы я все еще получал все идентификаторы?

CosmoCramer 03.05.2019 17:46

Конечно. Кажется, я вижу, где новые идентификаторы.

QHarr 03.05.2019 17:50

Пожалуйста, проверьте редактирование и убедитесь, что это то, что вы хотели.

QHarr 03.05.2019 17:56

Да, это работает тихий код, я думаю, что я получаю не все идентификаторы, а 50%, так как теперь у меня возникают проблемы в других областях, я открою новую ветку. Спасибо!

CosmoCramer 03.05.2019 18:07

Тогда один момент, пожалуйста.

QHarr 03.05.2019 18:07

Можете ли вы дать мне отсутствующее значение идентификатора?

QHarr 03.05.2019 18:10

"111310689" например. последний на странице

CosmoCramer 03.05.2019 18:13

то есть в выводе списка Это последнее/

QHarr 03.05.2019 18:24

эй извините за задержку ответа. Я просто получаю 20 идентификаторов в качестве вывода, но страница содержит 60. Похоже, скрипт скоро остановится.

CosmoCramer 07.05.2019 09:55

пожалуйста, предоставьте мне отсутствующий идентификатор, найденный на странице, но не в ответе выше.

QHarr 07.05.2019 10:27

Все это Например: "105147583 103639187 89145037 111337199 96836280 101618556 101618055 101617574 102721369 108761945 110914846 108761466 108761117 111148131 111147712 111147267"

CosmoCramer 07.05.2019 10:55

Привет, есть шанс поболтать с тобой

CosmoCramer 14.05.2019 09:54

@CosmoCramer Да, но только сегодня вечером, если только это не займет буквально 1 минуту.

QHarr 14.05.2019 10:50

Другие вопросы по теме