我不是网页设计或网站/html 背景人士,并且是该领域的新手。
尝试从包含容器/卡片的此链接抓取元素。
我尝试了下面的代码并取得了一点成功,但不确定如何正确地执行它才能获取信息内容,而不会在结果中获取 html/css 元素。
from bs4 import BeautifulSoup as bs
import requests
url = 'https://ihgfdelhifair.in/mis/Exhibitors'
page = requests.get(url)
soup = bs(page.text, 'html')
cards = soup.find_all('div', class_="row Exhibitor-Listing-box")
cards
它显示的内容如下:
[<div class="row Exhibitor-Listing-box">
<div class="col-md-3">
<div class="card">
<div class="container">
<h4><b> 1 ARTIFACT DECOR (INDIA)</b></h4>
<p style="margin-bottom: 5px!important; font-size: 13px;"><span>Email : </span> [email protected]</p>
<p style="margin-bottom: 5px!important; font-size: 13px;"><span>Contact Person : </span> SHEENU</p>
<p style="margin-bottom: 5px!important; font-size: 13px;"><span>State : </span> UTTAR PRADESH</p>
<p style="margin-bottom: 5px!important; font-size: 13px;"><span>City : </span> AGRA</p>
<p style="margin-bottom: 5px!important; font-size: 13px;"><span>Hall No. : </span> 12</p>
<p style="margin-bottom: 5px!important; font-size: 13px;"><span>Stand No. : </span> G-15/43</p>
<p style="margin-bottom: 5px!important; font-size: 13px;"><span>Mobile No. : </span> +91-5624010111, +91-7055166000</p>
<p style="margin-bottom: 5px!important; font-size: 11px;"><span>Website : </span> www.artifactdecor.com</p>
<p style="margin-bottom: 5px!important; font-size: 13px;"><span>Source Retail : </span> Y</p>
<p style="margin-bottom: 5px!important; font-size: 13px;"><span>Vriksh Certified : </span> N</p>
</div>
现在,当我使用下面的代码来提取元素时:
for element in cards:
title = element.find_all('h4')
email = element.find_all('p')
print(title)
print(email)
输出:它给了我所需的信息,但其中包含我不想要的 html/css 内容
[<h4><b> 1 ARTIFACT DECOR (INDIA)</b></h4>, <h4><b> 10G HOUSE OF CRAFT</b></h4>, <h4><b> 2 S COLLECTION</b></h4>, <h4><b> ........]
[<p style="margin-bottom: 5px!important; font-size: 13px;"><span>Email : </span> [email protected]</p>, <p style="margin-bottom: 5px!important; font-size: 13px;"><span>Contact Person : </span> ..................]
那么,我怎样才能从结果中取出标题、电子邮件、联系人、州、城市元素,而不包含 html/css?
正如 Manos Kounelakis 所建议的,您可能正在寻找的是BeautifulSoup HTML 元素的属性。此外,根据类而不是
text
元素来拆分 html 更为自然,因为元素对应于屏幕上的每个可视卡片单元。以下是一些可以相当漂亮地打印信息的代码:card
row
card
您正在抓取的页面使用 JavaScript 呈现。这意味着当您通过 HTTP(S) GET 访问 HTML 时,它可能尚未完全准备好进行解析。
如果您使用硒,您可能会获得更好的结果,您可以这样做:
示例输出(为简洁起见,不完整):