Пока петля с красивым супом и питоном - PullRequest
0 голосов
/ 26 августа 2018

Хорошо.Теперь я действительно в тупике.Я очищаю данные красивым супом, и страницы имеют структурированный формат, такой как ссылка https://www.brightscope.com/ratings/a рейтинги проходят через other.Каждая буква, такая как a, b, c, ..., после оценок имеет несколько страниц для них.Я пытаюсь создать цикл while для перехода на каждую страницу, и пока существует определенное условие, очистите все ссылки (которые я до сих пор не получил в этом коде).Однако, когда я запускаю код, цикл while продолжает работать без остановки.Как я могу исправить это, чтобы перейти на каждую страницу и найти условие для выполнения, а затем, если оно не найдено, перейти к следующей букве?Прежде чем кто-либо спросит, я искал код и не вижу тегов li, пока он продолжает работать.

Например: https://www.brightscope.com/ratings/A/18 - это максимальное значение, которое он получит за А, но продолжает работать.

import requests
from bs4 import BeautifulSoup

url = "https://www.brightscope.com/ratings/"
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
hrefs = []
ratings = []
ks = []
pages_scrape = []

for href in soup.findAll('a'):
    if 'href' in href.attrs:
        hrefs.append(href.attrs['href'])
for good_ratings in hrefs:
    if good_ratings.startswith('/ratings/'):
        ratings.append(url[:-9]+good_ratings)

del ratings[0]
del ratings[27:]
count = 1
# So it runs each letter a, b, c, ... 
for each_rating in ratings:
    #Pulls the page
    page = requests.get(each_rating)
    #Does its soup thing
    soup = BeautifulSoup(page.text, 'html.parser')
    #Supposed to stay in A, B, C,... until it can't find the 'li' tag
    while soup.find('li'):
        page = requests.get(each_rating+str(count))
        print(page.url)
        count = count+1
        #Keeps running this and never breaks
    else:
        count = 1
        break

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Метод BeautfulSoup find() находит первого ребенка.Это означает, что если вам нужно просмотреть все <li> элементы, вам нужно использовать метод findAll () и выполнить итерацию по его результату.

0 голосов
/ 26 августа 2018

soup.find('li') никогда не изменяется. Все, что вы делаете в цикле while, это обновляете переменные page и count. Вам нужно приготовить новый суп с переменной page, тогда он изменится. Может быть, что-то вроде этого

while soup.find('li'):
        page = requests.get(each_rating+str(count))
        soup = BeautifulSoup(page.text, 'html.parser')
        print(page.url)
        count = count+1
        #Keeps running this and never breaks

Надеюсь, это поможет

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