Как получить все страницы с BeautifulSoup? - PullRequest
0 голосов
/ 20 сентября 2018

Я хочу получить ссылку со всех страниц, уже есть этот код, но когда я запускаю код, он всегда показывает ошибку (вернуть self.attrs [ключ]) KeyError: 'href'.Кто-нибудь может помочь, спасибо.Вот код:

from bs4 import BeautifulSoup
import urllib.request
import requests



url = "http://makeupuccino.com/makeup/faces/foundation?page={}"


def get_url(url):
    req = urllib.request.Request(url)
    return urllib.request.urlopen(req)

link = []
nama = []
merek = []
harga = []
gambar = []
deskripsi = []

page = 1
while (requests.get(url.format(page)).status_code==200):
    res = requests.get(url.format(page))
    print(res.url)
    soup = BeautifulSoup(res.content,"html.parser")
    items = soup.findAll("div",{"class":"product-block-inner"})
    if len(items)<=1:break #untuk stop ketika produk tidak ditemukan lagi di page selanjutnya
    for item in items:

        new_link = item.find("div",{"class":"image"})
        print(new_link["href"])


    page+=1

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

div не имеет атрибута href

, пожалуйста, попробуйте это:

new_link = item.find("div",{"class":"image"}).find('a').get('href)
print(new_link)
0 голосов
/ 20 сентября 2018

У вас есть элемент select div, который является родительским узлом вашего тега привязки, но не является тегом привязки, который содержит элемент href.Вам нужно добавить .a к коду, который находится внутри цикла.

Что-то вроде

print(new_link.a["href"])

даст вам ссылки должным образом.

Для правильной нумерации страниц я могу предложить вам два пути.

  1. Найдите количество страниц и зациклите их.В вашем случае номера страниц указаны в классе page-result.Номера страниц можно найти по следующему коду:

    page_numbers = soup.find('div', {'class':'page-result'}).text page_numbers = page_numbers.split('(')[-1].replace(' Pages)', '') total_pages = ['http://makeupuccino.com/makeup/faces/foundation?page='+str(i) for i in page_numbers] #this list will give you total pages - 4 pages with the link you provided

  2. break цикл while, когда на странице появляется текст There are no products to list in this category..Разверните его с помощью приведенного ниже кода:

    soup = BeautifulSoup(res.content,"html.parser") if 'There are no products to list in this category.' in str(soup): break else: #rest of your code.

Хотя второе решение кажется сравнительно простым, я бы посоветовал вам перейти к первому, поскольку оно научит вас многим вещам иэто тоже правильный путь.

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

...