首页 > 解决方案 > 从带有列表的网站获取名称并不总是有效

问题描述

我有以下代码:

Linksml=["https://articulo.mercadolibre.cl/MLC-554702642-samsung-note-9-dual-sim-128gb-carcasas-y-caja-_JM",
"https://articulo.mercadolibre.cl/MLC-554718846-audifonos-hyperx-cloud-ps4-_JM",
"https://articulo.mercadolibre.cl/MLC-554753668-disco-duro-ssd-_JM",
"https://articulo.mercadolibre.cl/MLC-554695355-celuar-samsung-j6-duos-_JM"]

for x in range(len(Linksml)):
    page=requests.get(Linksml[x])  
    soup=BeautifulSoup(page.content,'html.parser')
    tags=soup.find('h1', class_='item-title__primary ')
    print(tags)

它可以工作,但如果我运行 10 次,它会在 5 次显示产品 1 和 2 的名称,而在剩下的 5 次中,它会显示“无”。3个产品是随机的,一次执行产品1可以显示名称,两次之后可以显示“无”。3个产品都是这样,我不知道该怎么办了。请帮助我,奥林匹斯诸神。

标签: pythonbeautifulsouprequest

解决方案


实际上,第一个链接与其他链接不同,因此我已将其从list. 此代码适用于其他链接。尝试这个:

from bs4 import BeautifulSoup
from selenium import webdriver
import time

Linksml=["https://articulo.mercadolibre.cl/MLC-554718846-audifonos-hyperx-cloud-ps4-_JM",
"https://articulo.mercadolibre.cl/MLC-554753668-disco-duro-ssd-_JM",
"https://articulo.mercadolibre.cl/MLC-554695355-celuar-samsung-j6-duos-_JM"]

driver = webdriver.Chrome()

for x in range(len(Linksml)):
    driver.get(Linksml[x])
    time.sleep(3)

    soup=BeautifulSoup(driver.page_source,'html.parser')
    tags=soup.find('h1', class_= 'item-title__primary')
    if tags: print(tags.text.strip())

driver.close()

输出:

Audifonos Hyperx Cloud Ps4
Disco Duro Ssd
Celuar Samsung J6+ Duos

推荐阅读