Ошибка вложенного цикла Python при вставке в БД - PullRequest
0 голосов
/ 12 ноября 2019

У меня есть код, который удаляет данные с определенного веб-сайта https://vancouver.craigslist.org/search/ela. Моя проблема в том, что когда я выполняю свой код, он выдает ошибку 'list' object has no attribute 'get_attribute' в строке asdf = images.get_attribute("src"). Я использую библиотеку селена в очистке данных. Я хочу вставить URL-адрес изображения из моей таблицы с именем images, но не могу. Что не так с моим кодом? Я еще не знаком с Python, поэтому я задаю вопросы. Большое спасибо за внимание.

Текущий код

   x = driver.find_elements_by_class_name('hdrlnk')
    y = driver.find_elements_by_xpath('//p[@class="result-info"]/span[@class="result-meta"]//span[@class="result-price"]')
    images = driver.find_elements_by_xpath('//*[@id="sortable-results"]/ul/li/a/img')
    for img in images:
      print(img.get_attribute('src'))
      for i in range(len(x)):
        asdf = images.get_attribute("src")
        prod = (x[i].text)
        price = (y[i].text)
        image = asdf
        sql =  """INSERT INTO products (name,price,image) VALUES (%s,%s,%s)"""
        mycursor.execute(sql,(prod,price,image))
        mydb.commit()

Когда я комментирую эту строку

for img in images:
      print(img.get_attribute('src'))

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

   #for i in range(len(x)):
        #asdf = images.get_attribute("src")
        #prod = (x[i].text)
        #price = (y[i].text)
        #image = asdf
        #sql =  """INSERT INTO products (name,price,image) VALUES (%s,%s,%s)"""
        #mycursor.execute(sql,(prod,price,image))
        #mydb.commit()

Я получил желаемый результат, подобный этому

https://images.craigslist.org/00z0z_4cqgwC5PIXs_300x300.jpg
https://images.craigslist.org/00J0J_f6AnAonGjXd_300x300.jpg
https://images.craigslist.org/00606_mtKNjKREOO_300x300.jpg 
https://images.craigslist.org/00U0U_l5t0QnjZEPt_300x300.jpg
https://images.craigslist.org/00505_gIXt1C8aeqk_300x300.jpg
https://images.craigslist.org/00N0N_6P1GmSiL2vI_300x300.jpg

Пример данных для переменной x и y в цикле i:

x = Spigen Magnetic Car Phone Mount
y= $20

Что мне нужно сделать, чтобы вставить URL-адрес изображения с названием продукта и изображения в одну строку? TIA.

РЕДАКТИРОВАТЬ. Я попытался ответить @ terahertz и переписал мой код следующим образом

  x = driver.find_elements_by_class_name('hdrlnk')
    y = driver.find_elements_by_xpath('//p[@class="result-info"]/span[@class="result-meta"]//span[@class="result-price"]')
    images = driver.find_elements_by_xpath('//*[@id="sortable-results"]/ul/li/a/img')
    for img in images:
      # print(img.get_attribute('src'))
      for i in range(len(x)):
        asdf = img.get_attribute("src")
        prod = (x[i].text)
        price = (y[i].text)
        image = asdf
        sql =  """INSERT INTO products (name,price,image) VALUES (%s,%s,%s)"""
        mycursor.execute(sql,(prod,price,image))
        mydb.commit()

Текущие данные БД

+-----+------------------------------------------------------------------------+--------+-------------------------------------------------------------+
| id  | name                                                                   | price  | image                                                       |
+-----+------------------------------------------------------------------------+--------+-------------------------------------------------------------+
|   1 | Spigen Magnetic Car Phone Mount                                        | $20    | https://images.craigslist.org/00i0i_7PvHxDMvR2o_300x300.jpg |
|   2 | Netgear Nighthawk x6 r8000 wireless router                             | $120   | https://images.craigslist.org/00i0i_7PvHxDMvR2o_300x300.jpg |
|   3 | iPod Touch 8gb 2nd generation - Loaded with Classic Rock               | $60    | https://images.craigslist.org/00i0i_7PvHxDMvR2o_300x300.jpg |
|   4 | 3 plug 3.1A fast USB wallplugs                                         | $10    | https://images.craigslist.org/00i0i_7PvHxDMvR2o_300x300.jpg |
|   5 | Audio and Video Cables                                                 | $3     | https://images.craigslist.org/00i0i_7PvHxDMvR2o_300x300.jpg |
|   6 | Like New Samsung 50" HD TV ForSale                                     | $400   | https://images.craigslist.org/00i0i_7PvHxDMvR2o_300x300.jpg |
|   7 | SONY Alarm Clock                                                       | $20    | https://images.craigslist.org/00i0i_7PvHxDMvR2o_300x300.jpg |
|   8 | Bowers & Wilkins P7 Wireless MINT                                      | $450   | https://images.craigslist.org/00i0i_7PvHxDMvR2o_300x300.jpg |
+-----+------------------------------------------------------------------------+--------+-------------------------------------------------------------+

Теперь я могу вставить в свою базу данных, НО проблема в том, что столбец image имеетто же значение с другим. Это как только один вставленный URL-адрес изображения. И когда я зашел по ссылке, название продукта и изображение не совпадают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...