найти номер страницы в ajax сайтах для веб-очистки - PullRequest
0 голосов
/ 12 апреля 2020

Я хочу очистить сайт с помощью python и BeautifulSoup, но я не могу найти номер страницы, и я могу очистить только первую страницу сайта, я думаю, что этот сайт использовал Ajax, и когда я меняю страница URL-адрес не меняется.

Это ссылка на сайт:

https://ihome.ir/sell-residential-apartment/th-tehran

И это мой код, Я хочу вырезать 20 страниц этого сайта, очистить дома с их деталями, такими как цены, фонд и т. Д. c

import requests
from bs4 import BeautifulSoup

response = requests.get("https://ihome.ir/sell-residential-apartment/th-tehran")


soup = BeautifulSoup(response.json(), "html.parser")
prices = soup.select('.sell-value')
titles = soup.select('.title')

homes_prices = []
for home in prices:
    homes_prices.append(int(''.join(filter(str.isdigit, home.getText()))))


homes_titles = []
for title in titles:
    homes_titles.append(title.getText())

res = dict(zip(homes_titles, homes_prices))

for key, value in res.items():
    p = str(res[key])
    if len(str(res[key])) <= 2:
        p += '000000000'
    if len(str(res[key])) > 2:
        p += '000000'

    print(key.strip(), int(p))

1 Ответ

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

Нет необходимости использовать BeautifulSoup в качестве data, который вы ищете. уже представлен в JSON dict!

Вот Back-End API , где данные, извлеченные из него.

Как вы ищете scrape 20 страниц и каждая страница, содержащая 24 элементов.

Так что это 24 * 20 = 480, поэтому я настроил результат для каждой страницы на 480 и назвал API время лучше, чем циклическое повторение страниц несколько раз.

Теперь у вас есть JSON диктовка, к которой вы можете обращаться и извлекать все, что захотите!

import requests


params = {
    'is_sale': '1',
    'source': 'website',
    'paginate': '480',
    'page': '1',
    'locations[]': 'iran.th.tehran',
    'property_type[]': 'residential-apartment'
}


def main(url):
    r = requests.get(url, params=params).json()
    for item in r['data']:
        print(item.keys())


main("https://scorpion.ihome.ir/v1/flatted-properties")
...