【问题标题】:How to scrape specific IDs from a Webpage如何从网页中抓取特定 ID
【发布时间】:2019-08-28 04:04:33
【问题描述】:

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

所以我的想法是访问我获取信息的网站。 转到 Main-Search-Site 并抓取所有 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()

【问题讨论】:

    标签: python web-scraping beautifulsoup urllib scrape


    【解决方案1】:

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

    ID:


    自网站更新以来:

    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”不再存在您有任何其他解决方案来更改我仍然获得所有 ID 的代码吗?
    • 如果它很快,你可以。如果它更长并且需要代码和 html,则最好打开一个新线程。
    • 当然。我想我可以看到新的 id 在哪里
    • 请检查编辑,看看这是不是你想要的。
    • 请提供我在页面上找到但在上面的答案中没有找到的 id。
    猜你喜欢
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多