我想获取find_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_next = director.a”会生成一个none类型,以及如何解决该问题以提取Directors的名称。
答案 0 :(得分:0)
您可以使用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())
顺便说一句,请重写您的问题,它看起来很困惑。
答案 1 :(得分:0)
您似乎可以这样做:
span_list = rank.find_all('span', class_="lister-item-index unbold text-primary")
result_list = [i.text.strip() for i in span_list]
您还可以将字符串转换为float:
result_list = [float(i.text.strip()) for i in span_list]