如何循环遍历 div 类以访问其中的 li 类



我抓取了一个页面,发现使用我的 xpath 和正则表达式方法,我似乎无法获得div 类中的一组值

我已经尝试了此页面上所述的方法如何获取div 标签中的所有 li 标签然后下面显示的当前逻辑在我的文件中

    #PRODUCT ATTRIBUTES (STYLE, SKU, BRAND)     need to figure out how to loop thru a class and pull out the 2 list tags
prodattr = re.compile(r'<div class="pdp-desc-attr spec-prod-attr">([^<]+)</div>', re.IGNORECASE)
prodattrmatches = re.findall(prodattr, html)
for m in prodattrmatches:
        m = re.compile(r'<li class="last last-item">([^<]+)</li>', re.IGNORECASE)
        stymatches = re.findall(m, html)
#STYLE
sty = re.compile(r'<li class="last last-item">([^<]+)</li>', re.IGNORECASE)
stymatches = re.findall(sty, html)
#BRAND
brd = re.compile(r'<li class="first first-item">([^<]+)</li>', re.IGNORECASE)   
brdmatches = re.findall(brd, html)

以上是当前不起作用的代码..一切都返回为空。出于我的测试目的,我只是将数据(如果有(写入打印命令,以便我可以在控制台上看到它。

    itmDetails2 = dets['sku'] +","+ dets['description']+","+ dets['price']+","+ dets['brand']
在控制台中,这就是我得到的,

这就是我所期望的,通用消息只是占位符,直到我弄清楚这个逻辑。

SKUE GOES HERE,adidas Women's Essentials Tricot Track Jacket,34.97, BRAND GOES HERE
<div class="pdp-desc-attr spec-prod-attr">
    <ul class="prod-attr-list">
        <li class="first first-item">Brand: adidas</li>
        <li>Country of Origin: Imported</li>
        <li class="last last-item">Style: F18AAW400D</li>   
    </ul>
</div>

不要使用正则表达式来解析 HTML

有更好、更安全的方法可以做到这一点。

看看这个代码,使用 Parsel 和 BeautifulSoup 提取示例代码的li标签:

from parsel import Selector
from bs4 import BeautifulSoup
html = ('<div class="pdp-desc-attr spec-prod-attr">'
           '<ul class="prod-attr-list">'
             '<li class="first first-item">Brand: adidas</li>'
             '<li>Country of Origin: Imported</li>'
             '<li class="last last-item">Style: F18AAW400D</li>'
           '</ul>'
         '</div>')
# Using parsel
sel = Selector(text=html)
for li in sel.xpath('//li'):
    print(li.xpath('./text()').get())
# Using BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
for li in soup.find_all('li'):
    print(li.text)

输出:

Brand: adidas
Country of Origin: Imported
Style: F18AAW400D
Brand: adidas
Country of Origin: Imported
Style: F18AAW400D

我会使用 html 解析器并查找ul的类。使用 bs4 4.7.1

from bs4 import BeautifulSoup as bs
html = '''
<div class="pdp-desc-attr spec-prod-attr">
    <ul class="prod-attr-list">
        <li class="first first-item">Brand: adidas</li>
        <li>Country of Origin: Imported</li>
        <li class="last last-item">Style: F18AAW400D</li>   
    </ul>
</div>
'''
soup = bs(html, 'lxml')
for item in soup.select('.prod-attr-list:has(> li)'):
    print([sub_item.text for sub_item in item.select('li')])

最新更新