使用BeautifulSoup,网页抓取仅获得一半的项目

2024-10-06 11:19:47 发布

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

我试图从this页获取所有文章的标题

我想要的所有84项都具有相同的类名:

“cat_品牌名称-2XZRz cat_省略号-MujnT”

这是我的密码

from bs4 import BeautifulSoup
import urllib


url = "https://www.zalando.nl/herenschoenen/"

soep = BeautifulSoup(urllib.request.urlopen(url).read(), 'lxml')

#trying to get all objects with the article tag, which should be 84 items.
articles = (soep.body.find_all("article"))


for x in articles:
    try:
        print(x.find(class_="cat_brandName-2XZRz cat_ellipsis-MujnT").get_text())
    except:
        continue

但结果只给了我84项中的35项:

Nike Sportswear
Nike Sportswear
Nike Performance
Nike Performance
adidas Originals
Nike Sportswear
Clarks Originals
Nike Sportswear
Nike Performance
Nike Sportswear
Nike Sportswear
Nike Sportswear
Puma
Lacoste
Clarks Originals
Vans
Nike Performance
Birkenstock
adidas Originals
adidas Originals
Reef
adidas Originals
New Balance
Nike SB
Levi's®
adidas Originals
Lacoste
Tommy Hilfiger
New Balance
Reebok Classic
Bugatti
Birkenstock

当我将网页作为Chrome HTML文档保存到我的设备中,并在代码中使用它时,它会工作,我会得到所有的文章标题

但是我不想下载这些页面,也许有一种方法可以使用urllib来完成。 (对于requests.get(),也是同样的问题)


Tags: importurl标题getperformance文章urllibcat
1条回答
网友
1楼 · 发布于 2024-10-06 11:19:47

使用API可能是解决此问题的最佳方法,但是您也可以在selenium的帮助下实现这一点。你没有得到所有结果的原因是,当你第一次打开网页时,没有加载网页中的所有内容。确保您安装了ChromiumWebDriver并将其放在您的路径中

from selenium import webdriver
from bs4 import BeautifulSoup

url = "https://www.zalando.nl/herenschoenen/"
driver = webdriver.Chrome(driverPath)
driver.get(url)
html_content = driver.execute_script('return document.body.innerHTML')
soep = BeautifulSoup(html_content, 'lxml')

articles = (soep.body.find_all("article"))

for x in articles:
    try:
        print(x.find(class_="cat_brandName-2XZRz cat_ellipsis-MujnT").get_text())
    except:
        continue

相关问题 更多 >