繁体   English   中英

Web 只用 BeautifulSoup 抓取一半的项目

[英]Web scraping only getting half the items with BeautifulSoup

我正在尝试从此页面获取所有文章标题。

我想要的所有 84 个项目都具有相同的 class 名称:

“cat_brandName-2XZRz cat_ellipsis-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() 这是同样的问题)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM