在使用
BeautifulSoup
之前,您需要将其转换为 find
对象,否则它会使用 str.find
例如:
soup = BeautifulSoup(response.read(), "html.parser")
product = soup.find("h4", attrs ={"class": "productdescriptionname"})
print (product)
我认为这值得一提,如果
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
我在网上读到的关于这个问题的另一件事是这样的:“你的 beautiful soup 版本可能不支持 find。”因此,我最终升级和降级了版本很多次,然后才意识到这是一个错误的陈述由业余爱好者制作。
在打印之前我已经为此奋斗了大约 45 分钟type(soup)
。我希望这可以节省其他人的时间。
from requests import Session
from bs4 import BeautifulSoup as BS
from time import sleep
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 YaBrowser/23.11.0.0
Safari/537.36'}
work = Session()
work.get('https://quotes.toscrape.com/', headers=headers)
response = work.get('https://quotes.toscrape.com/login', headers=headers)
soup = BS(response.text, 'lxml')
token = soup.find('from').find('input').get('')в чем здесь ошибка? вот в этой строке token = soup.find('from').find('input').get('') а именно soup.find('from') я решил скать ошибку методом исключения поэтому довел до такого состояния и понял что в странице нет тэга '来自' а есть тэг '形式'
как только поменял на тэг 'form' ошибка с soup.find() - find() ушла может кому поможет