Проблема зацикливания на нескольких делениях с использованием Beautiful Soup - PullRequest
0 голосов
/ 23 апреля 2020

Ниже мой python код для очистки с использованием BS4. Когда я пытаюсь запустить l oop, он печатает те же данные, а также, пожалуйста, дайте мне знать, как запустить нумерацию страниц l oop в python.

import requests
from bs4 import BeautifulSoup as bs

url = 'https://www.yellowpages.com/los-angeles-ca/restaurants'

page = requests.get(url)

soup = bs(page.content,'html.parser')
#print(len(soup))

containers = soup.find_all("div",{"class","v-card"})
#print(containers[0])

name = containers.find_all("a",{"class","business-name"})
print(name[0].get_text())

phone = soup.find_all("div",{"class","phone"})
#print(phone[0].get_text())

add = soup.find_all("p",{"class","adr"})
#print(add[0].get_text())


for items in containers: 
    name_soup = containers.find("a",{"class","business-name"})
    print(name_soup)

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Эта строка выдаст вам ошибку -

name = containers.find_all("a",{"class","business-name"})

, потому что Containers - это список, а не один элемент, для которого вы можете вызвать find_all () method.

Вам необходимо получить доступ к контейнерам в al oop, так как это список div тегов, которые вы извлекли в предыдущей строке.

Это ваша предыдущая строка, где вы извлекаете все теги div (имеющие class = v-card) в списке -

containers = soup.find_all("div",{"class","v-card"})
0 голосов
/ 23 апреля 2020
for items in containers: 
    name_soup = containers.find("a",{"class","business-name"})
    print(name_soup)

Вы не используете переменную items; Вы постоянно ищете в containers.

Использование items.find(...).

, пожалуйста, дайте мне знать, как запустить нумерацию страниц l oop в python.

Это гораздо шире и действительно зависит от целевого сайта. Посмотрите, что меняется, когда вы нажимаете кнопку (следующая страница) на сайте. Часто это просто параметр строки запроса (например, ?p=3). Затем скопируйте это в своем GET.

...