Используйте flexbox и отрегулируйте выравнивание:
.box {
width:100px;
height:100px;
margin:20px;
display:inline-flex;
vertical-align:top;
/* overflow:hidden uncomment this to hide the overflow*/
border:1px solid;
align-items:flex-start;
}
img {
opacity:0.4;
}
<div class="box">
<img src="https://picsum.photos/150/150?image=1069" >
</div>
<div class="box" style="align-items:center;justify-content:center;">
<img src="https://picsum.photos/150/150?image=1069" >
</div>
<div class="box" style="align-items:flex-end;">
<img src="https://picsum.photos/150/150?image=1069" >
</div>
<div class="box" style="align-items:flex-end;justify-content:flex-end;">
<img src="https://picsum.photos/150/150?image=1069" >
</div>
Извините, я не смог вписать свой код в комментарии, поэтому я публикую в качестве ответа.
Это мой код для разбора таблиц:
# To find all the tables
table = soup.find('table', {'class': 'footable'})
# To get all rows in that table
rows = table.find_all('tr')
# A function to process each row
def processRow(row):
#All rows with hidden data
dataFields = row.find_all('td', {'style': True}
output = {}
#Fixed index numbers are not ideal but in this case will work
output['Discipline'] = dataFields[0].text
output['Cogome'] = dataFields[2].text
output['Cellulare'] = dataFields[8].text
output['email'] = dataFields[10].text
return output
# Declaring a list to store all results
results = []
# Iterating over all the rows and storing the processed result in a list
for row in rows:
results.append(processRow(row))
print(results)
click_next_page()
time.sleep(3)
count += 1
Я думаю, что-то не так. Я получаю «SyntaxError: неверный синтаксис» в «output = {}» ниже # Функция для обработки каждой строки.
Селен способ расширить эти таблицы. Есть лучший способ справиться с галстуком, который требуется для загрузки, но просто хотел получить это как можно скорее, поэтому просто пошел с time.sleep
from selenium import webdriver
import time
url = 'http://www.asca.ch/Partners.aspx?lang=it'
driver = webdriver.Chrome()
driver.get(url)
# Click the dropdown, select GE, click Confermo, click Ricerca
driver.find_element_by_xpath('//*[@id="ctl00_MainContent_ddl_cantons_Arrow"]').click()
time.sleep(2)
driver.find_element_by_xpath('//*[@id="ctl00_MainContent_ddl_cantons_DropDown"]/div/ul/li[9]').click()
driver.find_element_by_xpath('//*[@id="MainContent__chkDisclaimer"]').click()
driver.find_element_by_xpath('//*[@id="MainContent_btn_submit"]').click()
time.sleep(5)
#Function to Expand Tables
def expand_tables():
rows = driver.find_elements_by_xpath('//*[@id="MainContent_gw_partners"]/tbody/tr')
for row in rows:
row.click()
# Function to Click Next Page
def click_next_page():
driver.find_element_by_xpath('//*[@id="MainContent_btnNextPackId"]').click()
page = 1
num_of_pages = True
while num_of_pages == True:
print ('Page: %s' %page)
expand_tables()
## Your code to Parse the Tables ##
try:
click_next_page()
page += 1
except:
print ('You are at the end')
time.sleep(2)
# When finished
driver.close()
Если вы проверяете, вы можете увидеть, что это метод запроса: POST, поэтому использовал другой метод.
Если вы предпочитаете все еще использовать селен, просто дайте мне знать, и я тоже могу попытаться решить эту проблему.
Вам нужно будет взять данные формы и скопировать их в словарь полезной нагрузки. Я не включил все это, потому что это слишком долго, но я включил фрагмент кода в код, чтобы вы могли увидеть формат.
Тогда я просто использовал панд, чтобы взять таблицу с данными.
import requests
import bs4
import pandas as pd
url = 'http://www.asca.ch/Partners.aspx?lang=it'
headers = {'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-US,en;q=0.9',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'Content-Length': '55755',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': '_ga=GA1.2.1140629371.1547917375; _gid=GA1.2.1588639047.1547917375; ASP.NET_SessionId=fmxjh5jxwuq10awmqch1ztjz; __AntiXsrfToken=1d9c575ab1494ab29d2e796e2853eaac; _gat=1',
'Host': 'www.asca.ch',
'Origin': 'http://www.asca.ch',
'Referer': 'http://www.asca.ch/Partners.aspx?lang=it',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
'X-MicrosoftAjax': 'Delta=true',
'X-Requested-With': 'XMLHttpRequest'}
payload = {
'ctl00$RadScriptManagerMaster': 'ctl00$RadScriptManagerMaster|ctl00$MainContent$btn_submit',
'RadStyleSheetManager1_TSSM': ';|636398747139118389:c7e0c438;|636304438089400012:39e38b4c;|636304438089880540:19119943;|636304438090200892:b81c9af7;|636304438090180870:bb009068;|636304438089390001:e78ed9b3;|636325253237635520:dedafabf;|636304438089530155:5961cfc1;|636304438090290991:d08fa23c;|636304438089530155:7fafd27a',
'RadScriptManagerMaster_TSM': ';;System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35:en-US:af7dd01d-1544-48f6-a85d-1285ae370050:ea597d4b:b25378d2;||:460a097d:7a38c288:ace9a216;Telerik.Web.UI, Version=2014.1.403.40, Culture=neutral, PublicKeyToken=121fae78165ba3d4:en-US:ca584452-327f-4858-bf00-fb22c6f6fd75:16e4e7cd:ed16cbdc:f7645509:24ee1bba:f46195d3:2003d0b8:88144a7a:1e771326:aa288e2d:258f1c72:7165f74;',
'ctl00$MainContent$ddl_partners':'' ,
'ctl00_MainContent_ddl_partners_ClientState':'' ,
'ctl00$MainContent$ddl_countries': 'Suisse',
'ctl00_MainContent_ddl_countries_ClientState': '',
'ctl00$MainContent$ddl_cantons': 'GE',
...
...
'__ASYNCPOST': 'true',
'RadAJAXControlID': 'ctl00_MainContent_RadAjaxManager1'
}
r = requests.post(url, headers=headers, data=payload)
soup = r.text
tables = pd.read_html(r.text)
data = tables[0]
Выход:
print (data)
Unnamed: 0 ... Discipline(s) thérapeutique(s).1
0 NaN ... METHODES DE MASSAGELinfodrenaggio manualeMassa...
1 NaN ... METHODES ENERGETIQUES MANUELLESKinesiologia
2 NaN ... METHODES DE MASSAGEMassaggio classico
3 NaN ... METHODES AYURVEDIQUESHatha YogaMETHODES PSYCHO...
4 NaN ... METHODES DE MASSAGEMassaggio classicoMETHODES ...
5 NaN ... METHODES PRESCRIPTIVESOmeopatia
6 NaN ... METHODES ENERGETIQUES MANUELLESReikiMETHODES O...
7 NaN ... METHODES DE MASSAGEMassaggio tradizionale thai...
8 NaN ... METHODES DE MASSAGEMassaggio classicoMassaggio...
9 NaN ... METHODES DE MASSAGEMassaggio empirico
10 NaN ... METHODES PSYCHOLOGIQUES COMPLEMENTAIRESConsigl...
11 NaN ... METHODES PRESCRIPTIVESConsigli dietetici (MCO)...
12 NaN ... METHODES DE MASSAGEMassaggio classicoMassaggio...
13 NaN ... METHODES DE MASSAGEMassaggio terapeutico
14 NaN ... METHODES DE MASSAGELinfodrenaggio manualeMETHO...
[15 rows x 21 columns]