BS“ find_all”方法与所有目标均不匹配

时间:2019-04-03 10:10:24

标签: python beautifulsoup

当我在此页面上使用find_all方法时,美丽汤未找到所有目标。

此代码:

len(mySoup.find_all('div', {'class': 'lo-liste row'}))

返回1,但有4。

This是汤的网址。

4 个答案:

答案 0 :(得分:0)

当我查看给定链接的源代码时,我发现只有1个div,其类名为“ lo-liste row”,另外三个div的类名如下:“ lo-liste row not-first-ligne”,因此为什么只有1个输出。 尝试以下代码

len(soup.findAll('div', {'class': ['lo-liste row','not-first-ligne']}))

在此处输入代码

from bs4 import BeautifulSoup
import requests
page = requests.get("https://www.ubaldi.com/offres/jeu-de-3-disques-feutres-electrolux--ma-92ca565jeud-4b9yz--727536.php")
soup = BeautifulSoup(page.content, 'html.parser')
print(len(soup.findAll('div', {'class': ['lo-liste row','not-first-ligne']})))

答案 1 :(得分:0)

find_all确实匹配所有目标。

第一个产品有class=lo-liste row

接下来的3个产品中有class=lo-liste row not-first-ligne

import requests

url = 'https://www.ubaldi.com/offres/jeu-de-3-disques-feutres-electrolux--ma-92ca565jeud-4b9yz--727536.php'

response = requests.get(url)
mySoup = BeautifulSoup(response.text, 'html.parser')


for product in mySoup.find_all('div', {'class': 'lo-liste row'}):
    print (product.find('a').find_next('span').text.strip())


for product in mySoup.find_all('div', {'class': 'lo-liste row not-first-ligne'}):
    print (product.find('a').find_next('span').text.strip())


# or to combine those 2 for loops into 1
#for product in mySoup.findAll('div', {'class': ['lo-liste row','not-first-ligne']}):
    #print (product.find('a').find_next('span').text.strip())

输出:

SOS Accessoire
Stortle
Groupe-Dragon
Asdiscount

答案 2 :(得分:0)

使用select代替。它将与该类的所有4个匹配。

items = soup.select('.lo-liste.row')

答案 3 :(得分:0)

使用正则表达式re查找元素。

from bs4 import BeautifulSoup
import requests
import re

url = 'https://www.ubaldi.com/offres/jeu-de-3-disques-feutres-electrolux--ma-92ca565jeud-4b9yz--727536.php'

html= requests.get(url)
soup = BeautifulSoup(html.text, 'html.parser')
print(len(soup.find_all('div', class_=re.compile('lo-liste row'))))

输出:

4