selenium - 使用 Selenium 循环浏览房屋列表
问题描述
我正在尝试使用 Selenium 遍历一个家庭列表站点,并且无法让 while 循环遍历页面。 网页上显示的页面如图所示,没有“上一个”或“下一个”按钮。 我不确定如何找到该站点的列表页总数,但我正在使用 20 个循环测试这个 while 循环(使用 max_page_count = 20),因为我知道至少有 20 页列表。我正在考虑两 (2) 种迭代页面的方式,但每种方式都停留在不同的阶段:
- 使用:https ://www.tinyhomebuilders.com/tiny-house-marketplace/search?page= {}.format(page) 并创建一个计数器来浏览页面。
- 使用 Selenium 的单击功能单击提供的图片中显示的页面元素。
我已经检查并知道我可以从页面上刮掉价格元素,但我发现点击功能不起作用。
这是我的代码:
driver_location = 'C:/Users/oefel/Downloads/geckodriver-v0.26.0-win64'
os.environ['webdriver.firefox.driver'] = driver_location
driver = webdriver.Firefox(driver_location)
driver.get("https://www.tinyhomebuilders.com/tiny-house-marketplace/search")
driver.implicitly_wait(50)
driver.maximize_window()
tiny_house_price = []
page_count = 0
max_page_count = 20
while (page_count < max_page_count):
html_soup = BeautifulSoup(driver.page_source, 'lxml')
scraped_price = driver.find_elements_by_css_selector("div.card-body > div.price")
for price in scraped_price:
tiny_house_price.append(price.text)
print(tiny_house_price)
page = driver.find_elements_by_css_selector('.pagination > li > a.href').click()
page_count += 1
我将非常感谢任何帮助!
谢谢!
解决方案
在这种情况下,您不需要硒来获取文本。您可以通过向页面发出 get 请求并从中获取 html 来获取页面文本。页码作为 URL 参数传递,您可以循环访问它并获得所需的输出。下面的示例:
import requests
from bs4 import BeautifulSoup
tiny_house_price = []
page_count = 1
max_page_count = 20
while (page_count < max_page_count):
r = requests.get('https://www.tinyhomebuilders.com/tiny-house-marketplace/search?page={}'.format(page_count))
html_soup = BeautifulSoup(r.text, 'html.parser')
scraped_price = html_soup.select("div.card-body > div.price")
for price in scraped_price:
tiny_house_price.append(price.text.strip())
print(tiny_house_price)
page_count += 1
您的情况下的点击不起作用,因为选择器不正确。您必须通过链接文本找到元素并单击。链接文本将是页数。
如果您也想使用 selenium,可以使用上面使用的相同页面 url 参数逻辑。您只需要使用 selenium 打开网页并获取源代码并在获取 html 后导航到新页面。
推荐阅读
- python - 按图像时如何重新开始?
- php - Php - 使用一个功能传递多个标头
- windows - 在 Windows 上使用 --negotiate 和 curl 时,SSL/TLS 握手失败
- java - java.lang.IllegalStateExeption:期望一个字符串,但在第 1 行第 16 列路径 $[0].questions 为 BEGIN_ARRAY
- python - 带有大量输入的 FFMpeg 连接——如何最小化命令行长度
- javascript - 从 Firebase 数据库中删除子项后获取新列表
- flutter - 如何在 Flutter 中使用 RevenueCat PurchaserInfoUpdateListener
- reactjs - 将 Class 组件转换为 handleChange Hook
- neural-network - pytorch 中看似不一致的张量大小
- c++ - 包含带有可执行二进制文件的 Boost 库