Я сделал веб-браузер для сайта супермаркета.Он полагал, что я все сделал правильно, но каким-то образом я испортил использование словарей в списках, используя цикл for.Мой код больше даже не печатает текст, и я сам не могу найти решение.
Я попытался поместить пустой цикл вне цикла, в разных местах кода, но, похоже, все не получается.Я попытался вставить простой код print("test")
, чтобы увидеть, где код не работает.Тем не менее, сбой кажется нелогичным.
import time
import csv
from urllib.parse import urljoin
from selenium import webdriver
# csvFile = open('products.csv', 'w')
# writer = csv.writer(csvFile)
# writer.writerow(('name', 'price'))
pagenum = 1
base_url = 'https://www.ah.nl'
search_url = '/zoeken?query=groente&page={}'.format(pagenum)
active_url = urljoin(base_url,search_url)
driver = webdriver.Chrome()
driver.get(active_url)
driver.implicitly_wait(100)
next_page = driver.find_elements_by_tag_name('article')
total_products = driver.find_element_by_class_name('f-load-more')
T = total_products.text.split()
print(" Total products: " + str(T[3]))
var = len(next_page)-1
h = next_page[var]
while int(T[0]) < int(T[3]):
try:
time.sleep(1)
driver.execute_script("arguments[0].scrollIntoView();", h)
total_products.find_element_by_tag_name('button').click()
time.sleep(1)
except:
print("We did it boys. Proceeding with products ..")
break
def linkGrabber():
items = driver.find_elements_by_tag_name('article')
print(str(len(items)) + " items found on page.")
urls = []
for i in items:
try:
L = i.find_element_by_tag_name('a') .get_attribute('href')
urls.append([L])
except:
print('link for' + str(i) + ' not found.')
return urls
yum = linkGrabber()
# for practise purposes:
yum = yum[0:3]
P_LIST = []
for i in yum:
newdict = {}
i = "".join(i)
driver.get(i)
TITLE = driver.find_element_by_xpath('//*[@id="app"]/main').get_attribute('title')
newdict["url"] = i
newdict["name"] = TITLE
try:
x = driver.find_element_by_class_name('product-info-content-block')
x = x.find_element_by_tag_name('p').text
newdict["weight/amount"] = x
except:
continue
try:
NUTRITION_TABLE = driver.find_element_by_tag_name('tbody')
ENERGY = NUTRITION_TABLE.find_elements_by_tag_name('tr')
for i in ENERGY:
A = i.find_elements_by_tag_name('td')
UNIT = A[0].text
VALUE = A[1].text
newdict[UNIT] = VALUE
P_LIST.append(newdict)
except:
continue
print("-----------------------------------")
print(P_LIST)
# csvFile.close()
output:
We did it boys. Proceeding with products ..
1444 items found on page.
link for<selenium.webdriver.element> not found.
[]
Я пытаюсь собрать всю информацию из уникальных продуктов в списке словарей.После этого я запишу эту информацию в CSV-файл (код в процессе).Я также начну использовать Pandas.
Если у вас есть какие-либо советы по структурированию моего кода или что-то еще, пожалуйста, не стесняйтесь поделиться ими.Спасибо за помощь.