AttributeError: 'ResultSet' object has no attribute 'find_all' Beautifulsoup
AttributeError: 'ResultSet' object has no attribute 'find_all' Beautifulsoup
我不明白为什么会出现此错误:
我有一个相当简单的函数:
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>
你做错了两件事:
您正在 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]
如果你想 return href
属性的值(link 本身),你当然也需要提取它:
return news_links[0]['href']
如果您需要 所有 个 link 对象,而不是第一个对象,只需 return news_links
用于 link对象,或使用列表理解来提取 URL:
return [link['href'] for link in news_links]
我不明白为什么会出现此错误:
我有一个相当简单的函数:
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>
你做错了两件事:
您正在
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]
如果你想 return href
属性的值(link 本身),你当然也需要提取它:
return news_links[0]['href']
如果您需要 所有 个 link 对象,而不是第一个对象,只需 return news_links
用于 link对象,或使用列表理解来提取 URL:
return [link['href'] for link in news_links]