已抓取的源代码不完整 - 加载错误
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')))
使用请求和 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')))