Возвращает список только с 20 записями.Не выходит за рамки этого - PullRequest
0 голосов
/ 01 июня 2018
#importing the libraries
import urllib.request as urllib2

from bs4 import BeautifulSoup

#getting the page url
quote_page="https://www.quora.com/What-is-the-best-advice-you-can-give-to-a-junior-programmer"

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)

#separating the answers into lists
for i in range(0, len(ans), 100):
    chunk = ans[i:i+100]

#extracting all the answers and putting into a list 
finalans=[]
l=0
for i in chunk:
    stri=chunk[l]
    finalans.append(stri.text)
    l+=1
    continue

final_string = '\n'.join(finalans)

#final output
print(final_string)

Я не могу получить более 20 записей в этом списке.Что не так с этим кодом?(Я новичок, и я использовал некоторые ссылки, чтобы написать эту программу) Редактировать: Я добавил URL, который я хочу очистить.

1 Ответ

0 голосов
/ 01 июня 2018

Вы пытаетесь разбить 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...