Python3使用bs4提取span标记

2024-09-27 00:21:43 发布

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

我有一页的span标签

<span itemprop="name">
            DeWalt DCD778D2T-GB  18V 2.0Ah Li-Ion XR Brushless Cordless Combi Drill
        </span>

如何提取span标记中的文本,我尝试过使用一些find方法,但没有收到item对象错误

下面是我尝试过的代码,哪里出了问题

r=requests.get('https://www.screwfix.com/p/dewalt-dcd778d2t-gb-18v-2-0ah-li-ion-xr-brushless-cordless-combi-drill/268fx')

c=r.content
soup=BeautifulSoup(c,"html.parser")
ToolName1 = soup.find("span", {"itemprop" : "name"}).text

我的错误是

AttributeError:“非类型”对象没有属性“文本”


Tags: 对象name文本错误li标签findspan
1条回答
网友
1楼 · 发布于 2024-09-27 00:21:43

实际上,您得到了r.status.code403(禁止),然后repr(soup)是空字符串,所以soup.find没有得到任何值(“span”,“itemprop”:“name”})。它的意思是None.text,这就是为什么您得到AttributeError:“NoneType”对象没有属性“text”

您需要为这个url指定头,可能只是为头指定User-Agent

import requests
from bs4 import BeautifulSoup

url = ('https://www.screwfix.com/p/dewalt-dcd778d2t-gb-18v-2-0ah-li-ion-xr-'
       'brushless-cordless-combi-drill/268fx')

headers = {'User-Agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWeb'
                          'Kit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.14'
                          '9 Safari/537.36')}

r = requests.get(url, headers=headers)
if r.status_code == 200:
    c = r.content
    soup = BeautifulSoup(c,"html.parser")
    ToolName1 = soup.find("span", {"itemprop" : "name"}).text
    print(ToolName1.strip())

然后你会得到这个

DeWalt DCD778D2T-GB  18V 2.0Ah Li-Ion XR Brushless Cordless Combi Drill

状态代码200是成功的一般情况,有一些状态代码,而不是200,仍然意味着成功

相关问题 更多 >

    热门问题