Вы пытаетесь разбить ans
на более мелкие порции, но обратите внимание, что каждая итерация этого цикла отбрасывает предыдущее содержимое chunks
, поэтому вы теряете все, кроме последней порции данных.
#separating the answers into lists
for i in range(0, len(ans), 100):
chunk = ans[i:i+100] # overwrites previous chunk
Вот почему вы получаете только 20 элементов в списке ... это только последний кусок.Поскольку вы хотите, чтобы final_string
содержал все текстовые узлы, нет необходимости разбивать его на части, и я просто удалил его.
Далее, и это просто ужесточение кода, вам не нужно обаитерируйте значения списка и отслеживайте индекс, чтобы получить то же значение, которое вы индексируете.Работая на ans
, потому что мы больше не работаем,
finalans=[]
l=0
for i in ans:
stri=ans[l]
finalans.append(stri.text)
l+=1
continue
становится
finalans=[]
for item in ans:
finalans.append(item.text)
или более подозрительно
finalans = [item.text for item in ans]
Так что программа
#importing the libraries
import urllib.request as urllib2
from bs4 import BeautifulSoup
#getting the page url
quote_page="https:abcdef.com"
page=urllib2.urlopen(quote_page)
#parsing the html
soup = BeautifulSoup(page,"html.parser")
# Take out the <div> of name and get its value
name_box = soup.find("div", attrs={"class": "AnswerListDiv"})
#finding all the tags in the page
ans=name_box.find_all("div", attrs={"class": "u-serif-font-main--large"},recursive=True)
#extracting all the answers and putting into a list
finalans = [item.text for item in ans]
final_string = '\n'.join(finalans)
#final output
print(final_string)