使用bs4获取tags属性的值

时间:2017-06-14 13:25:39

标签: python-3.x bs4

我正在使用 bs4 Python3 来获取在 amazon 上搜索到的产品的详细信息,  这是我的代码:

 from bs4 import BeautifulSoup as BS 
 import requests

 html = requests.get('http://www.amazon.in/s/ref=nb_sb_noss_2?url=search-
 alias%3Daps&field-keywords=hp+monitors')

 soup = BS(html.text , 'lxml')
 #print(soup.prettify())

 for i in soup.find_all('li') :
    print(i.get('id'))
    h2_tag = i.h2
    print(h2_tag.get('data-attribute'))
    print("_____")

使用此代码,我无法获得 h2 标记的数据属性属性的值。而 li 标记的 id 属性的值正在出现。 任何人都可以告诉我在哪里做错了。

html to scrap

1 个答案:

答案 0 :(得分:1)

这里有几点要说:

  1. 而不是html.text,请使用as recommended here html.content

  2. 为什么要在这里使用lxmlhtml.parser应该没问题。

  3. 无需使用data-attribute代码:您只需使用h2.text抓取h2中的文字。

  4. 收集产品标题的简单方法是直接遍历具有<h2>类(产品标题)的所有s-inline

    from bs4 import BeautifulSoup
    import requests
    
    html = requests.get('http://www.amazon.in/s/ref=nb_sb_noss_2?url=search-alias%3Daps&field-keywords=hp+monitors')
    soup = BeautifulSoup(html.content , 'html.parser')
    
    for h2 in soup.find_all('h2', class_='s-inline'):
        print(h2.text)
    

    输出

    HP 24ES 23.8-HP 24ES 23.8-inch THINNEST LED Monitor (Black)LED Monitor (Black)
    HP 22es Display 54.6 cm, 21.5 Inch THINNEST IPS LED Backlit Monitor
    HP 22KD 21.5-inch FULL HD LED Backlit Monitor (Black
    HP 19KA 18.5-inch LED Backlit Monitor (Black)
    HP 27es 27 Inches Display IPS LED Backlit Monitor (Full HD)
    HP 21KD 20.7-inch FULL HD LED Backlit Monitor (Black)
    LG 24MP88HV-S 24"IPS Slim LCD Monitor
    Dell S Series S2415H 24-Inch Screen Full HD HDMI LED Monitor
    Dell E1916HV 18.5-inch LED Monitor (Black)
    HP 20KD 19.5-inch LED Backlit Monitor (Black)
    Dell S2216H 21.5-Inch Full HD LED Monitor
    HP V222 21.5" LED Widescreen Monitor (M1T37AA Black)
    AlexVyan®-Genuine Accessory with 1 year warranty:= (38.1CM) 15 Inch LCD Monitor for HP, Dell, Lenovo, Pc Desktop Computer Only (Black)
    Compaq B191 18.5-inch LED Backlit Monitor (Black)
    HP 20WD 19.45-Inch LED Backlit Monitor
    HP Compaq F191 G9F92AT 18.5-inch Monitor
    

    此外,不要使用粗体显示内联代码,而是使用这样的反引号:

    `codecode`将呈现为codecode

    修改

    在这里,soup.find_all('h2')会从页面中获取所有h2标签,但亚马逊页面也有除产品之外的其他元素的h2标签。我刚刚注意到所有产品都有s-inline类,因此soup.find_all('h2', class_='s-inline")只会从产品中获取h2代码。