Python 3, Beautifulsoup и чистка веб-страниц urlopen

Я просматриваю этот веб- сайт для получения информации о таких продуктах, как описание продукта и цена. веб-сайт использует нумерацию страниц, чтобы загрузить только первые 20 продуктов, и когда я делаю очистку, моя программа просто получает первые 20 продуктов. Как я могу получить все эти продукты. вот мой код

 from bs4 import BeautifulSoup
 from urllib.request import urlopen
 import csv
 import random


myfile = open('example.csv', 'w')

def scrape():
    page = urlopen('https://www.olx.com.ng/')
    soup = BeautifulSoup(page.read(), 'html.parser')


    for price, description  in zip(soup.findAll('p', 
    {'class':'_13OzP'}),soup.findAll('p',{'class':'_2uySz'})):
    info = price.text + ' -------------------------- ' + description .text
    print(info)

`Это примерное изображение html-структуры. Проверьте области, отмеченные красным, на изображении.

1 ответ

Вы можете получить доступ к API напрямую. Вам нужно прочитать "курсор" из первого запроса и передать его следующему запросу, чтобы получить следующий набор результатов. В этом примере используются запросы, но вы можете легко адаптировать его для использования urllib.

import requests
import json
cursor = "0"
for i in range (30):
    r = requests.get("https://www.olx.com.ng/api/items?query=%7B%22sorting%22%3A%22desc-creation%22%7D&cursor=" + cursor)
    j = r.json()
    cursor = j['metadata']['cursor']
    for d in j['data']:
        print ("Title: {}, Price {}".format(d['title'].encode("utf-8"), d['price']['value']['raw']))

Выходы:

Title: Brand New 2.5HP Electric Motorized Treadmill With Mp3 Player Exercise, Price 250000
Title: Tokunbo Toyota Venza 2012 White, Price 6500000
Title: Clean Registered 2007 Toyota Tundra, Price 3550000
Title: Ladies Bike Hajour Lucky, Price 80000
Title: 110k p/a two bedroom to let in Agbede, Price 110000
...
Другие вопросы по тегам