我正在嘗試提取網頁的分頁號,并嘗試了多種方法都無濟于事;
什么是正確的方法,請解釋為什么以下這些方法不能按要求提取資訊:
第一種方法:
for i in range(0, 48, 24):
url = f'https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=STATION^1712&maxPrice=500000&radius=0.5&sortType=10&propertyTypes=&mustHave=&dontShow=&index={i}&furnishTypes=&keywords='
r = requests.get(url)
soup = BeautifulSoup(r.content, 'lxml')
page = soup.select('span[]')
print(page)
回傳:
[]
[]
我也試過:
1. page = soup.find('span', {'data-bind':'text: total'})
2. page = soup.select("[class~=pagination-pageInfo]")
什么都不回傳
page = soup.select('span', {'data-bind':'text: total'})
它回傳一堆不必要的東西,而不是分頁號。
如何獲取底部的分頁號?預期輸出:
1
2
uj5u.com熱心網友回復:
你得到的 DOM 樹中沒有分頁元素,因為這些資料是由 Javascript 加載的。您有 2 個選擇:
- 您可以使用Selenium并做您想做的事情(按
span[]選擇器搜索元素)。 - 您仍然可以
requests為您的目的使用,因為您可以在頁面 HTML 底部的 JSON 中找到所有頁面資料,包括分頁。您可以使用正則運算式輕松獲取它。完整代碼:
import json
import requests
import re
for i in range(0, 48, 24):
url = f'https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=STATION^1712&maxPrice=500000&radius=0.5&sortType=10&propertyTypes=&mustHave=&dontShow=&index={i}&furnishTypes=&keywords='
r = requests.get(url)
html = r.text
full_data_json = json.loads(re.search(r'window\.jsonModel = (.*)</script>', html).group(1))
print(full_data_json["pagination"]["page"])
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/392383.html
