Как удалить определенные идентификаторы с веб-страницы - PullRequest
2 голосов
/ 06 апреля 2019

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

Так что моя идея заключалась в том, чтобы зайти на сайт, где я получаю информацию.Перейдите на сайт Main-Search-Site и очистите все 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()

1 Ответ

0 голосов
/ 06 апреля 2019

Как то так?В словаре 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)

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

image


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

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)
...