如何存储BeautifulSoup的find\u all函数的结果

2024-04-27 00:20:13 发布

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

我想得到find\u all结果的文本,但是为什么当我将文本存储在for循环中时,它仍然包含所有标记?你知道吗

import requests
from bs4 import BeautifulSoup
import csv

f = csv.writer(open('imdb-films', 'w'))
f.writerow(['Rank','Movie-name', 'Year', 'Score', 'Director'])

url = 'https://www.imdb.com/search/title?title_type=feature&release_date=2018-01-01,2018-12-31&ref_=adv_prv'

contents = requests.get(url)
soup = BeautifulSoup(contents.text, 'lxml')

rank = soup.find('div', class_ = 'lister-list')

print(rank.prettify())

for rank in rank.find_all('span', class_="lister-item-index unbold text-primary"):
     rank_list = rank.text

如果我将for循环改为以下内容,它就可以工作了。你知道吗

 for rank in rank.find_all('span', class_="lister-item-index unbold text-primary"):
     print rank.text

它生成我想要的结果;我只希望那些打印出来的数字存储在变量中,作为列表或数组

根据下面的答案修改代码后,上述问题就解决了。谢谢您!!

但现在我遇到了一个新问题。你知道吗

director_list = []


for director in rank.find_all('p', class_ = ""):
    director_next = director.a.text
    director_list.append(director_next)

print(director_list)

此代码生成以下输出:

AttributeError: 'NoneType' object has no attribute 'text'

我不知道为什么“director\u next=director.a”会生成一个none类型,以及如何修复该类型以提取控制器的名称。你知道吗


Tags: textin文本importforallfindrequests
2条回答

您可以使用get_text()函数,应该首先创建一个list。你知道吗

试试这个:

import requests
from bs4 import BeautifulSoup
import csv

f = csv.writer(open('imdb-films', 'w')) 
f.writerow(['Rank','Movie-name', 'Year', 'Score', 'Director'])

url = 'https://www.imdb.com/search/title?title_type=feature&release_date=2018-01-01,2018-12-31&ref_=adv_prv'

contents = requests.get(url)
soup = BeautifulSoup(contents.text, 'lxml')

rank = soup.find('div', class_ = 'lister-list')

print(rank.prettify())

rank_list=[]
for rank in rank.find_all('span', class_="lister-item-index unbold text-primary"): 
    rank_list.append(rank.get_text())

顺便说一句,请重写你的问题,它看起来很混乱。你知道吗

似乎你可以这样做:

span_list = rank.find_all('span', class_="lister-item-index unbold text-primary")
result_list = [i.text.strip() for i in span_list]

还可以将字符串转换为浮点:

result_list = [float(i.text.strip()) for i in span_list]

相关问题 更多 >