从带有列表的网站获取名称并不总是有效

Posted

技术标签:

【中文标题】从带有列表的网站获取名称并不总是有效【英文标题】:Getting names from a website with a list doesn't always work 【发布时间】:2021-02-15 01:59:01 【问题描述】:

我有以下代码:

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个产品都是这样,我不知道该怎么办了。请帮助我,奥林匹斯诸神。

【问题讨论】:

您是否尝试过打印 get-requests 中的响应以检查是否确实存在任何具有 item-title__primary 类的项目? 【参考方案1】:

其实第一个链接和其他的不一样,所以我把它从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

【讨论】:

以上是关于从带有列表的网站获取名称并不总是有效的主要内容,如果未能解决你的问题,请参考以下文章

从公司名称中获取后缀列表

从 Django Queryset 获取值列表的最有效方法

节点对于 Xpath 并不总是有效

如何获取带有年份的月份名称和两个日期之间的年份列表

获取带有名称的活动 URL 列表

从哪里获取地理数据?