已抓取的源代码不完整 - 加载错误

Scraped Source code is incomplete - Loading Error

使用请求和 urllib3 我抓取了 https://www.immowelt.de/liste/berlin/ladenflaechen . The source code is incomplete because it will only contain 4 listed items, instead of 20. Looking at the resulting Source we find the following hint for it being a "loading" / pagination problem (line number 2191). The full source code I managed to get can be inspected here: https://pastebin.com/FgTd5Z2Y

的 "incomplete" 源代码
<div class="error alert js-ErrorGeneric t_center padding_top_30" id="js-ui-items_loading_error" style="display: none;">
                        Unbekannter Fehler, bitte laden Sie die Seite neu oder versuchen Sie es später erneut.
</div>

翻译错误文本:未知错误,请重新加载页面或稍后重试。

在该错误之后,将显示转到下一页的源代码。遗憾的是,16 个项目的第 1 页和第 2 页之间存在漏洞。

我试图找到一个解决方案,深入研究请求库和 urllib3 以找到任何有用的东西。因此我尝试了一个流而不是简单的 "get"。遗憾的是,它对我没有任何帮助。

import requests
import urllib3

# using requests
url = "https://www.immowelt.de/liste/berlin/ladenflaechen"
source_code = requests.get(url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text, features="html.parser")

# using urllib3
http = urllib3.PoolManager()
r = http.request('GET', 'https://www.immowelt.de/liste/berlin/ladenflaechen')
rip = r.data.decode('utf-8')

我希望获得页面上的所有项目,但只获得了前 4 个。源代码似乎显示,简单的请求命令不会像在浏览器中那样加载整个源代码。

该页面 POST 请求更多结果。您可以执行初始请求以获取总结果数,然后执行后续请求 POST 以获取所有结果。请注意,我偏爱 requests 库,我们可以高效地重新使用与 Session 对象的连接。

import requests, re
from bs4 import BeautifulSoup as bs

p = re.compile(r'search_results":(.*?),')

with requests.Session() as s:  
    r = s.get('https://www.immowelt.de/liste/berlin/ladenflaechen')
    num_results = p.findall(r.text)[0]
    body = {'query': 'geoid=108110&etype=5','offset': 0,'pageSize': num_results}
    r = s.post('https://www.immowelt.de/liste/getlistitems', data = body)
    soup = bs(r.content, 'lxml')
    print(len(soup.select('.listitem')))