#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