簡體   English   中英

使用 BeautifulSoup 從網站上抓取每個元素

[英]Scraping each element from website with BeautifulSoup

我編寫了一個用於抓取一個房地產網站的代碼。 這是鏈接:

https://www.nekretnine.rs/stambeni-objekti/stanovi/lista/po-stranici/10/

從這個頁面我只能得到公寓的位置、大小和價格,但是是否可以編寫一個代碼,將 go 在每個公寓的頁面上並從中刮取價值,因為它包含更多信息。 檢查此鏈接:

https://www.nekretnine.rs/stambeni-objekti/stanovi/arena-bulevar-arsenija-carnojevica-97m-2-lode-energoprojekt/NkvJK0Ou5tV/

我已經發布了一個代碼。 我注意到當我點擊特定的房地產時,我的 url 發生了變化。 例如:

arena-bulevar-arsenija-carnojevica-97m-2-lode-energoprojekt/NkvJK0Ou5tV/

我教過如何創建 for 循環,但無法知道它是如何變化的,因為它最后有一些 id 號:

NkvJK0Ou5tV

這是我擁有的代碼:

from bs4 import BeautifulSoup
import requests

website = "https://www.nekretnine.rs/stambeni-objekti/stanovi/lista/po-stranici/10/"

soup = requests.get(website).text
my_html = BeautifulSoup(soup, 'lxml')

lokacija = my_html.find_all('p', class_='offer-location text-truncate')
ukupna_kvadratura = my_html.find_all('p', class_='offer-price offer-price--invert')
ukupna_cena = my_html.find_all('div', class_='d-flex justify-content-between w-100')
ukupni_opis = my_html.find_all('div', class_='mt-1 mb-1 mt-lg-0 mb-lg-0 d-md-block offer-meta-info offer-adress')


for lok, kvadratura, cena_stana, sumarno in zip(lokacija, ukupna_kvadratura, ukupna_cena, ukupni_opis):

    lok = lok.text.split(',')[0] #lokacija

    kv = kvadratura.span.text.split(' ')[0] #kvadratura
    jed = kvadratura.span.text.split(' ')[1] #jedinica mere

    cena = cena_stana.span.text #cena

    sumarno = sumarno.text

    datum = sumarno.split('|')[0].strip()
    status = sumarno.split('|')[1].strip()
    opis = sumarno.split('|')[2].strip()

    print(lok, kv, jed, cena, datum, status, opis)

您可以從 div class="placeholder-preview-box ratio-4-3" 獲取 href。 從這里您可以找到 URL。

您可以遍歷頁面底部分頁提供的鏈接:

from bs4 import BeautifulSoup as soup
import requests
d = soup(requests.get('https://www.nekretnine.rs/stambeni-objekti/stanovi/lista/po-stranici/10/').text, 'html.parser')
def scrape_page(page):
   return [{'title':i.h2.get_text(strip=True), 'loc':i.p.get_text(strip=True), 'price':i.find('p', {'class':'offer-price'}).get_text(strip=True)} for i in page.find_all('div', {'class':'row offer'})]

result = [scrape_page(d)]
while d.find('a', {'class':'pagination-arrow arrow-right'}):
   d = soup(requests.get(f'https://www.nekretnine.rs{d.find("a", {"class":"pagination-arrow arrow-right"})["href"]}').text, 'html.parser')
   result.append(scrape_page(d))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM