使用beautifulsoup创建元素列表

2024-09-30 18:21:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想废弃的html部分如下:

<ul . . .> #has some attributes represented by dots
<li . . .>
<div class="c1">
    <h4 class="c2">T1</h4>
    <h5 class="c3">T2</h5>
    <p class="c4">T3</p>
    <p class="c5">T4</p>

</div>
</li>
<li . . .>
<div class="c1">
    <h4 class="c2">T1</h4>
    <h5 class="c3">T2</h5>
    <p class="c4">T3</p>
    <p class="c5">T4</p>
</div>

</li>
<li> . . .</li>
.  .  .
.  .  .
.  .  .   # dots show repetition
</ul>

现在我想从h4h5ppdivc1li列表中获取文本。我使用selenium解决了这个问题,如下所示:

pare = driver.find_elements_by_xpath("//div[@class='c1']")
for par in pare:
        title = par.find_element_by_xpath("./h4[@class='c2']")
        manu = par.find_element_by_xpath("./h5[@class='c3']")
        desc = par.find_element_by_xpath("./p[@class='c4']")
        tit.append(title.text)
        man.append(manu.text)
        des.append(desc.text)

现在在beautifulsoup中,我使用了以下代码,但它无法打印空列表:

titles = soup.find_all("h4","WideSidebarProductList-item-title")
manufacturers = soup.find_all("h5","WideSidebarProductList-item-manufacturer")
descriptions = soup.find_all("p","WideSidebarProductList-item-description")
prices = soup.find_all("p","WideSidebarProductList-item-price")

for i,t in enumerate(titles):
    tit.append(t.get_text(strip=True))
    man.append(manufacturers[i].get_text(strip=True))
    des.append(descriptions[i].get_text(strip=True))
    pri.append(prices[i].get_text(strip=True))

列表打印为空。请帮我解决这个问题,因为我是新来的。你知道吗


Tags: textdivbyliallfindxpathh4
1条回答
网友
1楼 · 发布于 2024-09-30 18:21:02

您可以尝试:

my_divs = soup.find_all('div', {'c1'})
titles = [h for div in my_divs for h in div.find_all("h4")]
manufacturers = [h for div in my_divs for h in div.find_all("h5")]
descriptions = [p for div in my_divs for p in div.find_all("p")]
prices = [p for div in my_divs for p in soup.find_all("p")]


man = [item.get_text(strip=True) for item in manufacturers]
tit = [item.get_text(strip=True) for item in titles]
des = [item.get_text(strip=True) for item in descriptions]
pri = [item.get_text(strip=True) for item in prices]

相关问题 更多 >