Как можно отказаться от цен на следующих страницах? - PullRequest
0 голосов
/ 26 июня 2019

Я новичок в Python и в Интернете.Я написал несколько кодов, используя запросы и Beautifulsoup.Один код для очистки цен и имен и ссылок.Это прекрасно работает и выглядит следующим образом:

from bs4 import BeautifulSoup
import requests

urls = "https://www.meisamatr.com/fa/product/cat/2-%D8%A2%D8%B1%D8%A7%DB%8C%D8%B4%DB%8C.html#/pagesize-24/order-new/stock-1/page-1"
source = requests.get(urls).text
soup = BeautifulSoup(source, 'lxml')

for figcaption in soup.find_all('figcaption'):
    price = figcaption.div.text
    name = figcaption.find('a', class_='title').text
    link = figcaption.find('a', class_='title')['href']

    print(price)
    print(name)
    print(link)

, а также один для создания других URL-адресов, из которых мне нужна эта информация, которая также дает правильные URL-адреса при использовании print ():

x = 0
counter = 1

for x in range(0, 70)
    urls = "https://www.meisamatr.com/fa/product/cat/2-%D8%A2%D8%B1%D8%A7%DB%8C%D8%B4%DB%8C.html#/pagesize-24/order-new/stock-1/page-" + str(counter)
    counter += 1
    x += 1
    print(urls)

Но когда я пытаюсь объединить эти два элемента, чтобы удалить страницу, а затем изменить URL-адрес на новый, а затем удалить его, он просто возвращает информацию на первой странице 70 раз.пожалуйста, проведите меня через это.весь код выглядит следующим образом:

from bs4 import BeautifulSoup
import requests

x = 0
counter = 1
for x in range(0, 70):
    urls = "https://www.meisamatr.com/fa/product/cat/2-%D8%A2%D8%B1%D8%A7%DB%8C%D8%B4%DB%8C.html#/pagesize-24/order-new/stock-1/page-" + str(counter)
    source = requests.get(urls).text
    soup = BeautifulSoup(source, 'lxml')
    counter += 1
    x += 1
    print(urls)

    for figcaption in soup.find_all('figcaption'):
        price = figcaption.div.text
        name = figcaption.find('a', class_='title').text
        link = figcaption.find('a', class_='title')['href']

        print(price)
        print()
        print(name)
        print()
        print(link)

1 Ответ

0 голосов
/ 26 июня 2019

Ваш x=0, а затем инкриминирует его на 1, является избыточным и не нужен, так как он повторяется в этом диапазоне range(0, 70). Я также не уверен, почему у вас есть counter, поскольку вам это тоже не нужно. Вот как бы вы сделали это ниже:

ОДНАКО, я считаю, что проблема не в итерации или цикле, а в самом URL. Если вы вручную перейдете на две страницы, перечисленные ниже, содержимое не изменится:

https://www.meisamatr.com/fa/product/cat/2-%D8%A2%D8%B1%D8%A7%DB%8C%D8%B4%DB%8C.html#/pagesize-24/order-new/stock-1/page-1

, а затем

https://www.meisamatr.com/fa/product/cat/2-%D8%A2%D8%B1%D8%A7%DB%8C%D8%B4%DB%8C.html#/pagesize-24/order-new/stock-1/page-2

Поскольку сайт является динамическим, вам нужно найти другой способ перебора страницы на страницу или выяснить, какой именно URL-адрес. Так что попробуйте:

from bs4 import BeautifulSoup
import requests

for x in range(0, 70):
    try:
        urls = 'https://www.meisamatr.com/fa/product/cat/2-%D8%A2%D8%B1%D8%A7%DB%8C%D8%B4%DB%8C.html&pagesize[]=24&order[]=new&stock[]=1&page[]=' +str(x+1) + '&ajax=ok?_=1561559181560'
        source = requests.get(urls).text
        soup = BeautifulSoup(source, 'lxml')

        print('Page: %s' %(x+1))

        for figcaption in soup.find_all('figcaption'):

            price = figcaption.find('span', {'class':'new_price'}).text.strip()
            name = figcaption.find('a', class_='title').text
            link = figcaption.find('a', class_='title')['href']

            print('%s\n%s\n%s' %(price, name, link))
    except:
        break

Вы можете найти эту ссылку, зайдя на веб-сайт и посмотрев инструменты разработчика (Ctrl + Shift + I или щелкните правой кнопкой мыши «Inspect») -> сеть -> XHR

Когда я сделал это и затем физически щелкнул на следующую страницу, я увидел, как эти данные были обработаны, и нашел ссылочный URL.

enter image description here

...