首页 > 解决方案 > 在 beautifulsoup4 中选择 div ID

问题描述

请放轻松,这是我的第一个 bs4 网络爬虫!我正在尝试为二手商品网站上的价格选择一个 div ID。这是价格框的检查元素部分:

  <div class="price-box">

  <div id="priceBox-price" class="price" itemprop="price" content="879,00">

                €&amp;nbsp;879,-         
    </div>

这是我的python代码:

import requests
import bs4

def scrape_site(url):                       
    res = requests.get()
    res.raise_for_status()
    soup = bs4.BeautifulSoup(res.text, 'html.parser')
    price = soup.find("div", class_= "price")
    print(price)

print(price)返回“无”。我尝试将许多类 ID 和其他 div ID 传递给soup.findorsoup.select但不幸的是我似乎无法从框中提取数字。

我还想在此页面上选择许多其他元素并将它们添加到已经初始化的全局可用列表中。传递soup.find多个类 ID(或此处的任何解决方案)或将找到的soup对象附加到列表中的多行更有效吗?

这是我想从中提取价格、颜色、位置和修改/发布日期的广告示例:

https://www.willhaben.at/iad/kaufen-und-verkaufen/d/serious-valparola-pro-rennrad-422463471/

任何帮助是极大的赞赏!

编辑:

无论我改变什么变量,.get它都不起作用。这是我当前的完整代码,所有函数返回(没有.get)都是“无”

from bs4 import BeautifulSoup

#list initialisation for data storage

name = []
address = []
colour = []
price = []
last_edited = []


def scrape_site(url):
    page = requests.get(url)
    soup = BeautifulSoup(page.content,'html.parser') #.get('content')
    price = soup.find('div',{'itemprop':'price'})
    print(price)

标签: pythonweb-scrapingbeautifulsoup

解决方案


尝试这个:

In [51]: from bs4 import *

In [52]: soup = BeautifulSoup('''  <div class="price-box">
    ...:
    ...:   <div id="priceBox-price" class="price" itemprop="price" content="879,00">
    ...:
    ...:                 &nbsp;879,-
    ...:     </div>''', 'html.parser')

In [53]: soup.find('div',{'itemprop':'price'}).get('content')
Out[53]: '879,00'

根据您的评论:

import pandas ad pd
data = []
list_of_ad_urls = ['url1','url2', 'url3']
for url in list_of_ad_urls:
    page = requests.get(url)
    soup = BeautifulSoup(page.content,'html.parser')
    required_item_1 = soup.find(logic to find element 1)
    price = soup.find('div',{'itemprop':'price'}).get('content')
    required_item_3 = soup.find(logic to find element 3)
    data.append([required_item_1, required_item_2, required_item_3])

pd.DataFrame(data).to_csv('mydata.csv', index=False, header='h1,h2,h3'.split(','))

推荐阅读