Как зациклить клик с селеном и очистить каждую таблицу с помощью bs4?

Используйте 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>

2
задан Jamal Hajjar 19 January 2019 в 15:05
поделиться

3 ответа

Извините, я не смог вписать свой код в комментарии, поэтому я публикую в качестве ответа.

Это мой код для разбора таблиц:

# 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 = {}» ниже # Функция для обработки каждой строки.

0
ответ дан Jamal Hajjar 19 January 2019 в 15:05
поделиться

Селен способ расширить эти таблицы. Есть лучший способ справиться с галстуком, который требуется для загрузки, но просто хотел получить это как можно скорее, поэтому просто пошел с 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()
0
ответ дан chitown88 19 January 2019 в 15:05
поделиться

Если вы проверяете, вы можете увидеть, что это метод запроса: POST, поэтому использовал другой метод.

Если вы предпочитаете все еще использовать селен, просто дайте мне знать, и я тоже могу попытаться решить эту проблему.

Вам нужно будет взять данные формы и скопировать их в словарь полезной нагрузки. Я не включил все это, потому что это слишком долго, но я включил фрагмент кода в код, чтобы вы могли увидеть формат.

enter image description here

Тогда я просто использовал панд, чтобы взять таблицу с данными.

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]
0
ответ дан chitown88 19 January 2019 в 15:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: