python - bs4 findAll 没有从网站上的其他页面收集所有数据
问题描述
我正在尝试使用 BeautifulSoup 抓取一个房地产网站。我正在尝试获取伦敦的租金清单。这有效,但仅适用于网站的第一页。其中有 150 多个,所以我错过了很多数据。我希望能够从所有页面收集所有价格。这是我正在使用的代码:
import requests
from bs4 import BeautifulSoup as soup
url = 'https://www.zoopla.co.uk/to-rent/property/central-london/?beds_max=5&price_frequency=per_month&q=Central%20London&results_sort=newest_listings&search_source=home'
response = requests.get(url)
response.status_code
data = soup(response.content, 'lxml')
prices = []
for line in data.findAll('div', {'class': 'css-1e28vvi-PriceContainer e2uk8e7'}):
price = str(line).split('>')[2].split(' ')[0].replace('£', '').replace(',','')
price = int(price)
prices.append(price)
关于为什么我不能使用此脚本从所有页面收集价格的任何想法?
额外的问题:有没有办法使用汤、IE 来访问价格并进行任何列表/字符串操作?当我打电话时,data.find('div', {'class': 'css-1e28vvi-PriceContainer e2uk8e7'})
我得到以下形式的字符串<div class="css-1e28vvi-PriceContainer e2uk8e7" data-testid="listing-price"><p class="css-1o565rw-Text eczcs4p0" size="6">£3,012 pcm</p></div>
任何帮助将非常感激!
解决方案
您可以将参数附加&pn=<page number>
到 URL 以获取下一页:
import re
import requests
from bs4 import BeautifulSoup as soup
url = "https://www.zoopla.co.uk/to-rent/property/central-london/?beds_max=5&price_frequency=per_month&q=Central%20London&results_sort=newest_listings&search_source=home&pn="
prices = []
for page in range(1, 3): # <-- increase number of pages here
data = soup(requests.get(url + str(page)).content, "lxml")
for line in data.findAll(
"div", {"class": "css-1e28vvi-PriceContainer e2uk8e7"}
):
price = line.get_text(strip=True)
price = int(re.sub(r"[^\d]", "", price))
prices.append(price)
print(price)
print("-" * 80)
print(len(prices))
印刷:
...
1993
1993
--------------------------------------------------------------------------------
50
推荐阅读
- python - 从导入的模块编辑类
- java - 线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引:20,大小:20
- php - 调用未定义的方法 mysqli_stmt::get_results()
- angular - 如何检索EventEmitter响应Angular 6
- serial-port - 是否可以从串口 IOException 中可靠地恢复?
- c# - 当 INotifyPropertyChanged 触发时,按钮 isEnabled 属性与布尔值的绑定不会改变
- java - 不熟悉的 Java 语法
- ios - 一个视图控制器上的两个 CollectionView
- python - 如何删除仅包含其值的变量
- matplotlib - 如何使用matplotlib在3D图中绘制穿过原点的轴