Python 3使用bs4提取span标签

时间:2020-06-26 01:20:04

标签: python beautifulsoup

我有一个页面的span标签

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

我将如何提取span标记内的文本,我尝试使用一些查找方法,但未收到任何项目对象错误

下面是我尝试过的代码,我在哪里出错?

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:'NoneType'对象没有属性'text'

1 个答案:

答案 0 :(得分:1)

实际上,您获得了hideForm() { this.$emit('update:hiddenMode', true); } 403(禁止访问),然后repr(soup)是空字符串,因此,汤(.span),{“ itemprop”:“ name”})为None。这意味着None.text,这就是为什么出现AttributeError的原因:'NoneType'对象没有属性'text'。

您需要为此网址指定标题,也许只是r.status.code作为标题

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())

状态码200是成功的一般情况,有些状态码(不是200)仍然表示成功。