迭代无限页面滚动
iterating over infinite page scrolls
我正在从这个网站抓取数据 https://www.heiminfo.ch/institutionen
,下面是我的代码
import pandas as pd
import requests
import time
import csv
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep
from random import randint
from bs4 import BeautifulSoup
from selenium import webdriver as wb
driver=wb.Chrome('chromedriver.exe')
driver.maximize_window()
driver.get(' https://www.heiminfo.ch/institutionen')
ton=driver.find_element_by_xpath('/html/body/div[1]/main/div/section/form/div[1]/div[3]/div/button[3]').click();
我的抓取器运行良好,但它一直在抓取已经抓取的数据。该网站有一个图标按钮,但它似乎也有无限滚动功能,因为每次您单击该图标按钮时,它都会比之前的项目多加载 5 个项目。
time.sleep(2)
h=[]
while True:
totals=int('1589')
soup=BeautifulSoup(driver.page_source, 'html.parser')
item=soup.find_all(class_="institutions")
for a in item:
lsh=a.find_all(class_="name-and-addition")
for e in lsh:
h.append(e.text.strip('\n'))
data=pd.DataFrame(zip(h), columns=['Adult Homes'])
print(data)
try:
driver.find_element_by_xpath("/html/body/div[1]/main/div/div/section/div[3]/div[2]/button/span[2]").click();
except:
if(len(data)==totals):
break
我的数据输出:
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
4 SGIPA Atelier protégé Saint-Jean
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
4 SGIPA Atelier protégé Saint-Jean
5 Tertianum Residenza Al Parco
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
4 SGIPA Atelier protégé Saint-Jean
5 Tertianum Residenza Al Parco
6 SUHRENTAL Alterszentrum \nRegionales Alterszen...
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
4 SGIPA Atelier protégé Saint-Jean
5 Tertianum Residenza Al Parco
6 SUHRENTAL Alterszentrum \nRegionales Alterszen...
7 Alters- und Pflegeheim Fahr
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
4 SGIPA Atelier protégé Saint-Jean
5 Tertianum Residenza Al Parco
6 SUHRENTAL Alterszentrum \nRegionales Alterszen...
7 Alters- und Pflegeheim Fahr
8 Stiftung Alters- und Pflegeheim Nidwalden \nNÄ...
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
4 SGIPA Atelier protégé Saint-Jean
5 Tertianum Residenza Al Parco
6 SUHRENTAL Alterszentrum \nRegionales Alterszen...
7 Alters- und Pflegeheim Fahr
8 Stiftung Alters- und Pflegeheim Nidwalden \nNÄ...
9 Stiftung Mühlehalde mobile Begleitetes Wohnen ...
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
4 SGIPA Atelier protégé Saint-Jean
5 Tertianum Residenza Al Parco
6 SUHRENTAL Alterszentrum \nRegionales Alterszen...
7 Alters- und Pflegeheim Fahr
8 Stiftung Alters- und Pflegeheim Nidwalden \nNÄ...
9 Stiftung Mühlehalde mobile Begleitetes Wohnen ...
10 Wohnheim Bachs
Adult Homes
我怎样才能在不返回我已经抓取的内容的情况下抓取它?
您可以执行以下操作来获取前 100 个左右的元素。
driver.get("https://www.heiminfo.ch/institutionen")
wait=WebDriverWait(driver, 10)
total=100
h=[]
while True:
try:
item=driver.find_element_by_class_name('institutions')
lsh=item.find_elements_by_class_name("name-and-addition")
if(len(lsh)>=total):
for e in lsh[:total]:
h.append(e.text.strip('\n'))
data=pd.DataFrame(zip(h), columns=['Adult Homes'])
print(data)
break
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".next.btn"))).click()
time.sleep(5)
except Exception as e:
print(e)
break
产出
Adult Homes
0 Birsfelden Alterszentrum
1 Alters- und Pflegeheim Bethania im Stedtli
2 Pflegezentrum Ennetsee
3 Wohnheim Zürichberg
4 Casa Güpf AG\nBetreutes Wohnen im Alter
.. ...
95 Psychiatrisches Zentrum Herisau
96 VESO Wohnen für Mutter und Kind
97 Zur Rose Reichenburg
98 Résidence Les Trémières
99 Alterssiedlung Bodmer
我正在从这个网站抓取数据 https://www.heiminfo.ch/institutionen
,下面是我的代码
import pandas as pd
import requests
import time
import csv
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep
from random import randint
from bs4 import BeautifulSoup
from selenium import webdriver as wb
driver=wb.Chrome('chromedriver.exe')
driver.maximize_window()
driver.get(' https://www.heiminfo.ch/institutionen')
ton=driver.find_element_by_xpath('/html/body/div[1]/main/div/section/form/div[1]/div[3]/div/button[3]').click();
我的抓取器运行良好,但它一直在抓取已经抓取的数据。该网站有一个图标按钮,但它似乎也有无限滚动功能,因为每次您单击该图标按钮时,它都会比之前的项目多加载 5 个项目。
time.sleep(2)
h=[]
while True:
totals=int('1589')
soup=BeautifulSoup(driver.page_source, 'html.parser')
item=soup.find_all(class_="institutions")
for a in item:
lsh=a.find_all(class_="name-and-addition")
for e in lsh:
h.append(e.text.strip('\n'))
data=pd.DataFrame(zip(h), columns=['Adult Homes'])
print(data)
try:
driver.find_element_by_xpath("/html/body/div[1]/main/div/div/section/div[3]/div[2]/button/span[2]").click();
except:
if(len(data)==totals):
break
我的数据输出:
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
4 SGIPA Atelier protégé Saint-Jean
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
4 SGIPA Atelier protégé Saint-Jean
5 Tertianum Residenza Al Parco
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
4 SGIPA Atelier protégé Saint-Jean
5 Tertianum Residenza Al Parco
6 SUHRENTAL Alterszentrum \nRegionales Alterszen...
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
4 SGIPA Atelier protégé Saint-Jean
5 Tertianum Residenza Al Parco
6 SUHRENTAL Alterszentrum \nRegionales Alterszen...
7 Alters- und Pflegeheim Fahr
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
4 SGIPA Atelier protégé Saint-Jean
5 Tertianum Residenza Al Parco
6 SUHRENTAL Alterszentrum \nRegionales Alterszen...
7 Alters- und Pflegeheim Fahr
8 Stiftung Alters- und Pflegeheim Nidwalden \nNÄ...
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
4 SGIPA Atelier protégé Saint-Jean
5 Tertianum Residenza Al Parco
6 SUHRENTAL Alterszentrum \nRegionales Alterszen...
7 Alters- und Pflegeheim Fahr
8 Stiftung Alters- und Pflegeheim Nidwalden \nNÄ...
9 Stiftung Mühlehalde mobile Begleitetes Wohnen ...
Adult Homes
0 Stiftung Emera \nAteliers bois de feu
1 Falkenstein \nBSB Pflegezentrum
2 La Fontanelle
3 Alters- und Pflegeheim Inseli
4 SGIPA Atelier protégé Saint-Jean
5 Tertianum Residenza Al Parco
6 SUHRENTAL Alterszentrum \nRegionales Alterszen...
7 Alters- und Pflegeheim Fahr
8 Stiftung Alters- und Pflegeheim Nidwalden \nNÄ...
9 Stiftung Mühlehalde mobile Begleitetes Wohnen ...
10 Wohnheim Bachs
Adult Homes
我怎样才能在不返回我已经抓取的内容的情况下抓取它?
您可以执行以下操作来获取前 100 个左右的元素。
driver.get("https://www.heiminfo.ch/institutionen")
wait=WebDriverWait(driver, 10)
total=100
h=[]
while True:
try:
item=driver.find_element_by_class_name('institutions')
lsh=item.find_elements_by_class_name("name-and-addition")
if(len(lsh)>=total):
for e in lsh[:total]:
h.append(e.text.strip('\n'))
data=pd.DataFrame(zip(h), columns=['Adult Homes'])
print(data)
break
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".next.btn"))).click()
time.sleep(5)
except Exception as e:
print(e)
break
产出
Adult Homes
0 Birsfelden Alterszentrum
1 Alters- und Pflegeheim Bethania im Stedtli
2 Pflegezentrum Ennetsee
3 Wohnheim Zürichberg
4 Casa Güpf AG\nBetreutes Wohnen im Alter
.. ...
95 Psychiatrisches Zentrum Herisau
96 VESO Wohnen für Mutter und Kind
97 Zur Rose Reichenburg
98 Résidence Les Trémières
99 Alterssiedlung Bodmer