如何从网页中抓取特定 ID

How to scrape specific IDs from a Webpage

我需要做一些房地产市场调查,为此需要新房的价格和其他价值。

所以我的想法是访问我获取信息的网站。 转到主搜索站点并抓取所有 RealEstateID,这些 RealEstateID 将直接导航到每个房屋的单个页面,在那里我可以提取我需要的信息。

我的问题是如何从主页获取所有房地产 ID 并将它们存储在列表中,以便我可以在下一步中使用它们来构建 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()

是这样的吗?字典中有 68 个键是 id。我使用正则表达式来获取与你之后相同的脚本和 trim 不需要的字符,然后加载 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)

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)