如何使用beautifulsoup提取内容

  |   python html beautifulsoup extract

我遇到了一个问题就是我想尝试从使用网站提取产品名称和价格。但我不知道如何提取内容。后来两位网有解决了我的问题,我十分感谢他们。

请看我的代码:

index.html

<div pagetype="simple_table_nonFashion" class="itemBox" id="itemSearchResultCon_679026">
    <p class="proPrice">
        <em class="num" id="price0_679026" productid="679026" adproductflag="0" yhdprice="49.9" productunit="" diapernum="0" diapernumunit="">
            <b>¥</b>49.90</em>
    </p>
    <p class="proName clearfix">
        <a id="pdlink2_679026" pmid="0" href="//item.yhd.com/679026.html">
            <style type="text/css">
                .preSellOrAppoint {
                    border: 1px solid #FFFFFF;
                }
            </style>印尼进口</a>
    </p>
</div>

Python文件

from bs4 import BeautifulSoup
import re
soup = BeautifulSoup(open("index.html"),"lxml")
itemBox = soup.find("div", {"class": "itemBox"})
proPrice = itemBox.find("p", {"class": "proPrice"}).find("em").text
pdlink2 = itemBox.find('a',{"id": re.compile('pdlink2_*')}).text
print(proPrice)
print(pdlink2)

打印出查看

¥49.90
.preSellOrAppoint {border: 1px solid #FFFFFF;}印尼进口

我觉得这样提取内容有些不对的。

如何解决正确地提取内容:

可以用soup.select_one()方法:

from bs4 import BeautifulSoup

soup = BeautifulSoup(open("index.html"),"lxml")
proPrice = soup.select_one("p.proPrice em").contents[-1]
pdlink2 = soup.select_one("p.proName > a").contents[-1]
print("[*] 商品价格:", proPrice)
print("[*] 商品标题:", pdlink2)

正确打印出的结果

[*] 商品价格: 49.90
[*] 商品标题: 印尼进口

或者.next_sibling允许访问<b><style>标签之外的文本。

from bs4 import BeautifulSoup
    
proPrice = soup.b.next_sibling
pdlink2 = soup.style.next_sibling
print(proPrice)
print(pdlink2)  

参考我的问题:如何使用beautifulsoup提取内容