python - 美汤python中的find()和find_all()有什么区别?

标签 python python-3.x web-scraping beautifulsoup python-requests

我正在做网络抓取,但我在 find() 和 find_all() 中卡住/困惑。

比如在哪里使用find_all,在哪里使用find()。

另外,我可以在哪里使用这种方法,例如 for 循环 或在 ul li 列表 ??

这是我试过的代码


from bs4 import BeautifulSoup
import requests

urls = "https://www.flipkart.com/offers-list/latest-launches?screen=dynamic&pk=themeViews%3DAug19-Latest-launch-Phones%3ADTDealcard~widgetType%3DdealCard~contentType%3Dneo&wid=7.dealCard.OMU_5&otracker=hp_omu_Latest%2BLaunches_5&otracker1=hp_omu_WHITELISTED_neo%2Fmerchandising_Latest%2BLaunches_NA_wc_view-all_5"

source = requests.get(urls)

soup = BeautifulSoup(source.content, 'html.parser')

divs = soup.find_all('div', class_='MDGhAp')

names = divs.find_all('a')

full_name = names.find_all('div', class_='iUmrbN').text

print(full_name)

并得到这样的错误
  File "C:/Users/ASUS/Desktop/utube/sunil.py", line 9, in <module>
    names = divs.find_all('a')
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\bs4\element.py", line 1601, in __getattr__
    raise AttributeError(

AttributeError: ResultSet object has no attribute 'find_all'. You're probably treating a list of items like a single item. Did you call find_all() when you meant to call find()?

那么任何人都可以解释我应该在哪里使用 查找 查找所有 ??

最佳答案

find()- 只在页面中找到搜索到的元素时返回结果。返回类型为<class 'bs4.element.Tag'> .

find_all() - 它返回所有匹配项(即它扫描整个文档并返回所有结果,返回类型将为 <class 'bs4.element.ResultSet'>)

from robobrowser import RoboBrowser
browser = RoboBrowser(history=True)
browser = RoboBrowser(parser='html.parser')
browser.open('http://www.stackoverflow.com')
res=browser.find('h3')
print(type(res),res)
print(" ")
res=browser.find_all('h3')
print(type(res),res)
print(" ")
print("Iterating the Resultset")
print(" ")
for x in range(0,len(res)):
  print(x,res[x])
  print(" ")

输出:
<class 'bs4.element.Tag'> <h3><a href="https://stackoverflow.com">current community</a>
</h3>

<class 'bs4.element.ResultSet'> [<h3><a href="https://stackoverflow.com">current community</a>
</h3>, <h3>
your communities            </h3>, <h3><a href="https://stackexchange.com/sites">more stack exchange communities</a>
</h3>, <h3 class="w90 mx-auto ta-center p-ff-roboto-slab-bold fs-headline2 mb24">Questions are everywhere, answers are on Stack Overflow</h3>, <h3 class="w90 mx-auto ta-center p-ff-roboto-slab-bold fs-headline2 mb24">Learn and grow with Stack Overflow</h3>, <h3 class="mx-auto w90 wmx12 p-ff-roboto-slab-bold fs-headline2 mb24 lg:ta-center">Looking for a job?</h3>]

Iterating the Resultset

0 <h3><a href="https://stackoverflow.com">current community</a>
</h3>

1 <h3>
your communities            </h3>

2 <h3><a href="https://stackexchange.com/sites">more stack exchange communities</a>
</h3>

3 <h3 class="w90 mx-auto ta-center p-ff-roboto-slab-bold fs-headline2 mb24">Questions are everywhere, answers are on Stack Overflow</h3>

4 <h3 class="w90 mx-auto ta-center p-ff-roboto-slab-bold fs-headline2 mb24">Learn and grow with Stack Overflow</h3>

5 <h3 class="mx-auto w90 wmx12 p-ff-roboto-slab-bold fs-headline2 mb24 lg:ta-center">Looking for a job?</h3>

关于python - 美汤python中的find()和find_all()有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59780916/

相关文章:

Python 将 4 位十六进制合并为 3 位十六进制

python - 服务器未终止

python - 不能将 librosa 与 python 3 一起使用

python - 仅从数据框中选择每个月的最后一周 - Python/Pandas

html - 如何使用 VBA 一次抓取多个页面/链接?

python - 使用 Selenium 进行网页抓取

python - 无法理解为什么返回此值

python - 如何在 Python 中动态组合和访问类属性?

python-3.x - 如何在Python上使用rawpy读取图片的RGB值

python - 如何使用 bs4 在 python 中抓取单页应用程序网站