attributeRor:“ResultSet”对象没有“find\u all”Beautifulsoup属性

2024-04-19 15:02:06 发布

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

我不明白为什么我会犯这个错误:

我有一个相当简单的函数:

def scrape_a(url):
  r = requests.get(url)
  soup = BeautifulSoup(r.content)
  news =  soup.find_all("div", attrs={"class": "news"})
  for links in news:
    link = news.find_all("href")
    return link

以下是我正在努力搜集的网页结构:

<div class="news">
<a href="www.link.com">
<h2 class="heading">
heading
</h2>
<div class="teaserImg">
<img alt="" border="0" height="124" src="/image">
</div>
<p> text </p>
</a>
</div>

Tags: 函数divurldef错误linkh2all
1条回答
网友
1楼 · 发布于 2024-04-19 15:02:06

你做错了两件事:

  • 您正在对news结果集调用find_all;可能您打算对links对象调用它,该结果集中的一个元素。

  • 文档中没有<href ...>标记,因此使用find_all('href')搜索不会得到任何结果。只有具有href属性的标记。

您可以将代码更正为:

def scrape_a(url):
    r = requests.get(url)
    soup = BeautifulSoup(r.content)
    news =  soup.find_all("div", attrs={"class": "news"})
    for links in news:
        link = links.find_all(href=True)
        return link

去做我认为你想做的事。

我会用CSS selector

def scrape_a(url):
    r = requests.get(url)
    soup = BeautifulSoup(r.content)
    news_links = soup.select("div.news [href]")
    if news_links:
        return news_links[0]

如果要返回href属性(链接本身)的值,当然还需要提取该值:

return news_links[0]['href']

如果需要链接对象而不是第一个,只需返回链接对象的news_links,或者使用列表理解来提取url:

return [link['href'] for link in news_links]

相关问题 更多 >