当我在此页面上使用find_all
方法时,美丽汤未找到所有目标。
此代码:
len(mySoup.find_all('div', {'class': 'lo-liste row'}))
返回1,但有4。
This是汤的网址。
答案 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