Хранение значений с веб-страницы с помощью селена

#python #selenium

Вопрос:

Я хочу создать словарь, в котором значения из одного класса будут храниться в виде ключей, а другой класс-в виде значений с веб-страницы, над которой я работаю.

Вот что я попробовал:

 from bs4 import BeautifulSoup import pandas as pd from selenium import webdriver DRIVER_PATH = '/usr/local/bin/chromedriver' driver = webdriver.Chrome(executable_path=DRIVER_PATH)  all_data = [] for i in range(1, 5, 1):  url = 'https://www.transfermarkt.co.uk/cristiano-ronaldo/profil/spieler/' str(i)  driver.get(url)  html = driver.page_source  soup = BeautifulSoup(html, 'html.parser')  data = {}  market_left = soup.find('div', {'class':'right-td'})  market_right = soup.find('div', {'class':'left-td'}) for m in market_left:  for mr in market_right:  print(data[m.text.strip()].append(mr.text.strip()))  

Однако я получаю следующую ошибку:

Ошибка атрибута: объект ‘NavigableString’ не имеет атрибута ‘текст’

Кроме того , когда я увеличиваю число в диапазоне, скажем, например, от range(1, 10, 1) , кажется, что оно не повторяется на многих страницах, оно выбирает только последнюю. Есть идеи о том, как он может получить информацию для каждой страницы в цикле?

Ожидаемый результат :

 {'Current market value:':[-, -, -,-,-]}   

Ответ №1:

Может использоваться zip в python для одновременного перебора двух списков.

Попробуйте, как показано ниже:

 for i in range(1,10):  url = "https://www.transfermarkt.co.uk/silvio-adzic/profil/spieler/{}".format(i)  driver.get(url)  time.sleep(5)  soup = BeautifulSoup(driver.page_source, 'html5lib')  market_left = soup.find_all('div',class_="left-td")  market_right = soup.find_all('div',class_="right-td")  print(f"In Page {i}")  for l,r in zip(market_left,market_right):  l_value = l.text.replace('n','').replace(' ','')  r_value = r.text.replace('n','').replace(' ','')  print(f"{l_value} {r_value}")  # Code to add the details to dictionary.  print("-----------------------------------------------------------")  

И на немногих страницах нет данных, которые вы ищете.

 In Page 1 Currentmarketvalue: - Lastupdate: Apr23,2009 Highestmarketvalue:Lastupdate: £225Th.Oct4,2004 ----------------------------------------------------------- In Page 2 ----------------------------------------------------------- In Page 3 ----------------------------------------------------------- In Page 4 Currentmarketvalue: - Lastupdate: Feb13,2007 Highestmarketvalue:Lastupdate: £360Th.Oct4,2004 ----------------------------------------------------------- In Page 5 Currentmarketvalue: - Lastupdate: Sep14,2010 Highestmarketvalue:Lastupdate: £1.26mOct4,2004 ----------------------------------------------------------- In Page 6 Currentmarketvalue: - Lastupdate: Aug2,2010 Highestmarketvalue:Lastupdate: £765Th.Oct6,2005 ----------------------------------------------------------- In Page 7 Currentmarketvalue: - Lastupdate: Jan30,2014 Highestmarketvalue:Lastupdate: £1.08mOct4,2004 ----------------------------------------------------------- In Page 8 Currentmarketvalue: - Lastupdate: Jan2,2010 Highestmarketvalue:Lastupdate: £1.35mJun2,2006 ----------------------------------------------------------- In Page 9 -----------------------------------------------------------  

Комментарии:

1. Почему я получаю ошибку, когда пытаюсь сохранить значения в словаре следующим образом: data[l_value].append(r_value) в конце вашего сценария. Как я могу это исправить?

2. @Stackcans — data это словарь. add , append , insert методы не работают. Вам нужно собрать values r-value отдельно в списке, а затем присвоить эти значения соответствующему ключу — l-value