Menggunakan permintaan dan urllib3 saya mengambil kode sumber "tidak lengkap" dari https://www.immowelt.de /liste/berlin/ladenflaechen. Kode sumber tidak lengkap karena hanya akan berisi 4 item yang terdaftar, bukannya 20. Melihat Sumber yang dihasilkan, kami menemukan petunjuk berikut untuk itu menjadi masalah "memuat" / pagination (nomor baris 2191). Kode sumber lengkap yang berhasil saya dapatkan dapat diperiksa di sini: https://Pastebin.com/FgTd5Z2Y

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

Menerjemahkan teks Kesalahan: Kesalahan tidak diketahui, harap muat ulang halaman atau coba lagi nanti.

Setelah itu Kesalahan kode sumber untuk pergi ke halaman berikutnya ditampilkan. Sayangnya ada obrolan antara halaman 1 dan halaman 2 dari 16 item.

Saya mencoba menemukan solusi dengan melihat lebih dalam ke perpustakaan permintaan dan urllib3 untuk menemukan apa pun yang akan membantu. Jadi saya mencoba aliran alih-alih "dapatkan" yang sederhana. Sayangnya itu tidak membantu saya dengan cara apa pun.

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

Saya berharap untuk mendapatkan semua item pada halaman, namun hanya mendapatkan 4. Kode sumber tampaknya menunjukkan, bahwa perintah permintaan sederhana tidak akan memuat seluruh kode sumber seperti di browser.

1
TiRoX 8 Agustus 2019, 20:57

1 menjawab

Jawaban Terbaik

Halaman melakukan permintaan POST untuk hasil lainnya. Anda dapat melakukan permintaan awal untuk mendapatkan jumlah hasil total dan POST tindak lanjut untuk mendapatkan semua hasil. Catatan Saya memiliki preferensi untuk pustaka requests dan kami memiliki efisiensi penggunaan kembali koneksi dengan objek 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')))
1
QHarr 8 Agustus 2019, 19:16