Python 3 使用 bs4 提取 span 标记



>我有一个页面的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

我的错误是

属性错误:"NoneType"对象没有属性"text">

实际上,你得到了r.status.code403(Forbidden(,然后repr(soup(是空字符串,所以你得到了soup.find("span", {"itemprop" : "name"}(的Noned。这意味着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

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

最新更新