如何解决Python Beautifulsoup,在标签中获取href标签
我在获取href
标签时遇到问题,所以我的情况是这样的,
这是html
文件:
<div class="list-product with-sidebar">
<a class="frame-item" href="./produk-a.html" target="_blank" title="Produk A">
</a>
<a class="frame-item" href="./produk-b.html" target="_blank" title="Produk B">
</a>
</div>
所以这是我的代码
def get_category_item_list(category):
base_url = 'https://www.website.com/'
res = session.get(base_url+category)
res = BeautifulSoup(res.content,'html.parser')
all_title = res.findAll('a',attrs={'class':'frame-item'})
data_titles = []
for title in all_title:
product_link = title.get('a')['href']
data_titles.append(product_link)
return data_titles
我想得到的是href
链接..像这样
produk-a.html
produk-b.html
当我尝试运行它时..它不会让我在href
上获得链接,他们给出了错误代码:
TypeError: 'NoneType' object is not subscriptable
解决方法
我相信您的问题出在这行:
product_link = title.get('a')['href']
您已经有一个“ a”元素列表,因此您可能只需要:
product_link = title['href']
,
您没有与我们共享网站,所以一个问题可能是该网站阻止了看起来像机器人的用户代理(请求的用户代理)。调试可能会有所帮助,您可以使用resp.content/text
打印页面的内容。
我创建了一个名为index.html
的HTML文件,然后读取该文件并将其内容抓取。我更改了一些代码,看起来一切正常。
soup.find
返回一个<class 'bs4.element.Tag'>
,因此您可以使用attribute['a']
访问它的属性。
from bs4 import BeautifulSoup
with open('index.html') as f:
html_content = f.read()
soup = BeautifulSoup(html_content,'html.parser')
data_titles = []
for a in soup.find('div',class_='list-product with-sidebar').find_all('a'):
data_titles.append(a['href'].split('/')[1])
print(data_titles)
# ['produk-a.html','produk-b.html']
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div class="list-product with-sidebar">
<a
class="frame-item"
href="./produk-a.html"
target="_blank"
title="Produk A"
>
</a>
<a
class="frame-item"
href="./produk-b.html"
target="_blank"
title="Produk B"
>
</a>
</div>
</body>
</html>
,
对于您的确切输出,
- 您已经遍历了定位标记
- 您需要用“ /”分隔并选择最后一个元素
from bs4 import BeautifulSoup
html = """<div class="list-product with-sidebar">
<a class="frame-item" href="./produk-a.html" target="_blank" title="Produk A">
</a>
<a class="frame-item" href="./produk-b.html" target="_blank" title="Produk B">
</a>
</div>"""
res = BeautifulSoup(html,'html.parser')
for a in res.findAll('a',attrs={'class':'frame-item'}):
print(a["href"].split("/")[-1])
输出:
produk-a.html
produk-b.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。