Как я могу сохранить результат функции find_all от BeautifulSoup - PullRequest
0 голосов
/ 30 января 2019

Я хочу получить текст результата 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_next = Director.a" генерирует тип none и как это исправить, чтобы извлечь имя директора.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

, кажется, вы можете сделать так:

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]
0 голосов
/ 30 января 2019

вы можете использовать функцию 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())

, кстати, пожалуйста, перепишите ваш вопрос, это выглядитзапутался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...