Хотите создать фрейм данных из нескольких циклов for - PullRequest
0 голосов
/ 23 сентября 2019

Я выполняю следующий код для создания DataFrame, мне нужно изменить операторы печати, пробовал кучу вещей, таких как сначала создание пустого df, затем добавление, но кадр данных перезаписывается при каждом цикле.Я новичок в этом, помощь очень ценится.[Это желаемый результат, нужен в качестве фрейма данных] [1]

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import selenium.common.exceptions
driver = webdriver.Chrome(executable_path='chromedriver')
catlink=['https://www.daraz.com.bd/camera-lenses','https://www.daraz.com.bd/small-kitchen-appliances/','https://www.daraz.com.bd/bedding-bath/']


for link in catlink:
    driver.get(link)
    time.sleep(10)
    for i in range(0,8):
        try:
            driver.find_element_by_xpath('//*[@id="root"]/div/div[2]/div[1]/div[1]/div/div[3]').click()
            time.sleep(4)
            i+=1
            elements = driver.find_elements_by_css_selector("div > div:nth-child(2) > div.c2xMr_ > div.ant-carousel > div > div.slick-list>* a")
            for element in elements:
                # want to create a dataframe from these two blocks: check the screen shot for the desired result
                print('mainlink:'+str(link)+str(driver.title) +':'+ str(element.get_attribute("href")))

        except (selenium.common.exceptions.NoSuchElementException):
            print('mainlink:'+str(link)+str(driver.title) +':No Banners')
            continue ```


  [1]: https://i.stack.imgur.com/m5ICz.png

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

добавьте кортежи (которые являются строкой вашего фрейма данных) ваших значений в URL в цикле и создайте фрейм данных с ним в конце

urls = []
for link in catlink:
    driver.get(link)
    time.sleep(10)
    for i in range(0,8):
        try:
            driver.find_element_by_xpath('//*[@id="root"]/div/div[2]/div[1]/div[1]/div/div[3]').click()
            time.sleep(4)
            i+=1
            elements = driver.find_elements_by_css_selector("div > div:nth-child(2) > div.c2xMr_ > div.ant-carousel > div > div.slick-list>* a")
            for element in elements:
                # want to create a dataframe from these two blocks: check the screen shot for the desired result
                print('mainlink:'+str(link)+str(driver.title) +':'+ str(element.get_attribute("href")))
                urls.append((str(link)+str(driver.title), str(element.get_attribute("href")))
        except (selenium.common.exceptions.NoSuchElementException):
            print('mainlink:'+str(link)+str(driver.title) +':No Banners')
            urls.append((str(link)+str(driver.title), ':No Banners'))
            continue 

result = pd.DataFrame(urls, columns=["mainlink", "banner"])
0 голосов
/ 23 сентября 2019

Вы можете append в значениях цикла в списке и последнем вызове. DataFrame Конструктор:

L = []
for link in catlink:
    driver.get(link)
    time.sleep(10)
    for i in range(0,8):
        try:
            driver.find_element_by_xpath('//*[@id="root"]/div/div[2]/div[1]/div[1]/div/div[3]').click()
            time.sleep(4)
            i+=1
            elements = driver.find_elements_by_css_selector("div > div:nth-child(2) > div.c2xMr_ > div.ant-carousel > div > div.slick-list>* a")
            for element in elements:
                # want to create a dataframe from these two blocks: check the screen shot for the desired result
                print('mainlink:'+str(link)+str(driver.title) +':'+ str(element.get_attribute("href")))
                L.append(str(link)+str(driver.title) +':'+ str(element.get_attribute("href")))

        except (selenium.common.exceptions.NoSuchElementException):
            print('mainlink:'+str(link)+str(driver.title) +':No Banners')
            continue ```

df = pd.DataFrame(L, columns=['mainlink'])

При необходимости 3 столбца в DataFrame добавить кортежи:

L = []
for link in catlink:
    driver.get(link)
    time.sleep(10)
    for i in range(0,8):
        try:
            driver.find_element_by_xpath('//*[@id="root"]/div/div[2]/div[1]/div[1]/div/div[3]').click()
            time.sleep(4)
            i+=1
            elements = driver.find_elements_by_css_selector("div > div:nth-child(2) > div.c2xMr_ > div.ant-carousel > div > div.slick-list>* a")
            for element in elements:
                # want to create a dataframe from these two blocks: check the screen shot for the desired result
                print('mainlink:'+str(link)+str(driver.title) +':'+ str(element.get_attribute("href")))
                L.append((str(link), str(driver.title), str(element.get_attribute("href")))

        except (selenium.common.exceptions.NoSuchElementException):
            print('mainlink:'+str(link)+str(driver.title) +':No Banners')
            continue ```

df = pd.DataFrame(L, columns=['link','title','href'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...