Python 属性错误:';NavigableString';对象没有属性,索引超出范围

Python 属性错误:';NavigableString';对象没有属性,索引超出范围,python,python-3.x,web-scraping,beautifulsoup,Python,Python 3.x,Web Scraping,Beautifulsoup,有什么可以帮忙的吗?因为我在这里提供的链接中苦苦挣扎了两天,想要检索产品的基本信息(产品名称、图片、评级、价格)。这是我的代码,我是python新手 import urllib.request from bs4 import BeautifulSoup from random import randint from bs4.dammit import EncodingDetector import re import sys url='https://fr.aliexpress.com/ca

有什么可以帮忙的吗?因为我在这里提供的链接中苦苦挣扎了两天,想要检索产品的基本信息(产品名称、图片、评级、价格)。这是我的代码,我是python新手

import urllib.request
from bs4 import BeautifulSoup
from random import randint
from bs4.dammit import EncodingDetector
import re
import sys


url='https://fr.aliexpress.com/category/205000316/men-clothing-accessories.html'
headers = {}
headers['User-Agent'] = "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:48.0) Gecko/20100101 Firefox/48.0,Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0',Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0',Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EN; rv:11.0) like Gecko',Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)',Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)',Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A'"

req = urllib.request.Request(url, headers = headers)
html = urllib.request.urlopen(req).read()

soup = BeautifulSoup(html.decode('utf8', 'ignore'), "html.parser")


# retrive infos such product name, price , rating
Prod=soup.find_all('ul', class_='util-clearfix son-list')

for item in Prod:
    print(item.contents[0].find_all("span",{"class:","star star-s "[0].text)
    print(item.contents[0].find_all("span",{"class:","star star-s "[0].text)
    print(item.contents[0].find_all("span",{"class:","star star-s "[0].text)

您的第一个错误是
Prod
实际上与产品列表相匹配,即
ul
元素,而您需要内部
li
元素,每个元素表示一个产品容器

然后,一旦您将其更改为查找产品,就可以遍历产品容器,查找包含名称、评级和其他所需信息的内部元素。为此,您需要浏览器开发人员工具来了解哪些HTML元素表示需要提取的数据:

products = soup.select('ul.son-list li.list-item')
for product in products:
    name = product.select_one("a.product").get_text()
    stars_element = product.select_one(".star")
    rating = stars_element["title"].split(": ")[1].strip().split(" ", 1)[0] if stars_element else "Unknown rating"

    print(name, rating)
印刷品:

Lurker Requin Peau Soft Shell V4 Tactique Militaire Veste Hommes Imperméable Coupe-Vent Chaud Manteau À Capuchon de Camouflage C... 4.8
HEYGUYS coton t chemises hommes new summer street wear hanche hop T-SHIRTS 2017 marque de mode fermeture éclair sur la manche t-... 4.8
2017 Nutella Motif Hommes et Femmes Hoodies Couples Casual Style 3D Impression Personnalité Automne Hiver Sweats À Capuche Survê... 4.8
...

产品名称、图像、价格:

import urllib.request
from bs4 import BeautifulSoup

url='https://fr.aliexpress.com/category/205000316/men-clothing-accessories.html'

headers = {}
headers['User-Agent'] = "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:48.0) Gecko/20100101 Firefox/48.0,Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0',Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0',Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EN; rv:11.0) like Gecko',Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)',Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)',Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A'"

req = urllib.request.Request(url, headers = headers)
html = urllib.request.urlopen(req).read()

soup = BeautifulSoup(html.decode('utf8', 'ignore'), "html.parser")

products = soup.find_all('div', class_='item')

for item in products:
    print(' item:', item.find(class_='info').find("a").text)
    print('price:', item.find(class_="price").find(class_='value').text)
    print('image:', item.find(class_="pic").find("img")['src'])
    print('--')
结果:

 item: Rocksir punisher t chemises pour hommes t-shirt Coton de mode marque t shirt hommes Casual Manches Courtes le punisher T-shirt h...
price: € 12,05 - 12,92
image: //ae01.alicdn.com/kf/HTB1ByVZSpXXXXcxaXXXq6xXFXXXW/New-Design-Male-Novelty-Men-T-shirt-Fashion-Cotton-O-neck-Hip-Hop-T-shirt-.jpg_220x220.jpg
--
 item: DIFFELEMENT 2017 Nouveau style long Manteau Hommes marque vêtements mode Long Vestes Manteaux marque-vêtements hommes Pardessus ...
price: € 44,82
image: //ae01.alicdn.com/kf/HTB12IqMXEAKL1JjSZFkq6y8cFXa2/DIFFELEMENT-2017-New-style-long-Coat-Men-brand-clothing-fashion-Long-Jackets-Coats-brand-clothing-mens.jpg_220x220.jpg
--

为什么得到的元素是同一元素的三倍?可能使用第二个
作为第一个
中的循环作为第二个
作为第二个
作为第二个
作为第二个
作为第二个
作为第二个
作为第二个
作为第二个
作为第二个
作为第一个
作为第二个
作为第二个
作为第二个
作为第二个
循环作为第二个
作为第二个
作为第二个
作为第二个
作为第“Unknown rating”@Ilyas这只是从“title”属性中获取数值评级值的一种方法。非常感谢alecxe,但是如果我想将此列表插入sqlite,我该怎么做呢?你知道吗,但我已经尝试过了,但成功了吗