【问题标题】:Scraping each element from website with BeautifulSoup使用 BeautifulSoup 从网站中抓取每个元素
【发布时间】:2019-10-29 06:08:43
【问题描述】:

我编写了一个用于抓取一个房地产网站的代码。这是链接:

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

从这个页面我只能得到公寓的位置、大小和价格,但是是否有可能编写一个代码来显示每个公寓的页面并从中获取价值,因为它包含更多信息。检查此链接:

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

我已经发布了一个代码。我注意到当我点击特定的房地产时我的网址发生了变化。例如:

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)

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 我已经发布了一个代码。我注意到当我点击特定的房地产时我的网址发生了变化。我教过创建 for 循环,但没有办法知道它是如何变化的,因为它最后有一些 id 号。
  • 收集所有这些链接,然后遍历它们然后打开这些网址。
  • 如何收集这些链接?有超过 10 000 个
  • 类似soup.findAll('a', attrs={'href': re.compile("^http://")})。但您必须更具体,这将为您提供所有链接,而不仅仅是详细信息页面的链接。

标签: python web-scraping beautifulsoup


【解决方案1】:

您可以从 div class="placeholder-preview-box ratio-4-3" 获取 href。 从这里您可以找到 URL。

【讨论】:

    【解决方案2】:

    您可以遍历页面底部分页提供的链接:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-27
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      相关资源
      最近更新 更多