Python 3.7 BeautifullSoup soup.find错误- find()没有关键字参数

6yjfywim  于 4个月前  发布在  Python
关注(0)|答案(2)|浏览(85)

我从URL中得到了下面的HTML:

<h4>
   \r\n                            \r\n\r\n
   <a href="/l">
      \r\n    <!-- mp_trans_rt_start id="1" args="as" 1 -->\r\n    <span class="brandWrapTitle">\r\n        <span class="productdescriptionbrand">Mxxx</span>\r\n    </span>\r\n    <span class="nameWrapTitle">\r\n        <span class="productdescriptionname">Axxxname</span>\r\n    </span>\r\n    <!-- mp_trans_rt_end 1 -->\r\n
   </a>
   \r\n\r\n                        
</h4>

字符串
我尝试使用python来查找类名:

import urllib.request
from bs4 import BeautifulSoup
url = "https://link"
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
urlwithagent = urllib.request.Request(url,headers={'User-Agent': user_agent})
response = urllib.request.urlopen(urlwithagent)
soup = response.read()
product = soup.find("h4", attrs ={"class=": "productdescriptionname"})
print (product)


Everythink工作完美,直到行:

product = soup.find("h4", attrs ={"class=": "productdescriptionname"})


我得到错误像:

find() takes no keyword arguments


我不知道如何修复它-周围有很多信息,但没有任何工作:/

mtb9vblg

mtb9vblg1#

您需要在使用find之前将其转换为BeautifulSoup对象,否则它将使用str.find

例如:

soup = BeautifulSoup(response.read(), "html.parser")
product = soup.find("h4", attrs ={"class": "productdescriptionname"})
print (product)

字符串

tyu7yeag

tyu7yeag2#

我认为这是值得一提的,如果find方法有问题,检查type(soup)是一个很好的方法来确定你是否使用正确的bs4.BeautifulSoup对象而不是str
我想在这里指出一件事,如果使用soup.prettify()使html可读。重要的是要注意,.prettify()bs4.BeautifulSoup转换为str。所以这应该单独使用,如:

soup = BeautifulSoup(response) # type(soup) --> bs4.BeautifulSoup
print(soup.prettify()) # print readable html

字符串
而不是像:

soup = BeautifulSoup(response).prettify() # type(soup) --> str


关于这个问题,我在网上读到的另一件事是类似 “你的美丽的汤版本可能不支持查找。" 因此,我最终升级和降级了好几次版本,才意识到这是一个业余爱好者的错误声明。
在打印type(soup)之前,我已经为此挣扎了大约45分钟。我希望这能节省其他人的时间。

相关问题