python-3.x - 通过将字典放在列表中来破坏我的代码。我究竟做错了什么?
问题描述
我为一家超市的网站制作了一个网络爬虫。它相信我做的一切都是正确的,但不知何故,我在使用 for 循环时搞砸了在列表中使用字典。我的代码甚至不再打印文本,我自己也找不到解决方案。
我尝试在代码中的不同位置将一个空的 dic 放在循环之外,但这似乎都失败了。我尝试将简单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()
输出:
We did it boys. Proceeding with products ..
1444 items found on page.
link for<selenium.webdriver.element> not found.
[]
我正在尝试从字典列表中的独特产品中获取所有信息。之后,我会将此信息写入 csv 文件(正在编写代码)。我也将开始使用 Pandas。
如果您对构建我的代码或其他任何内容有任何提示,请随时分享。感谢您的帮助。
解决方案
P_LIST.append(newdict)
在除条件之后和之前移动它print("-----------------------------------")
上面代码中的 P_LIST 的值在第二次尝试中更新,除了 case,如果尝试除外失败,您将不会在 P_LIST 中附加任何值。
(建议)还要在代码中添加一些调试日志,以便将来更好地调试。
推荐阅读
- apache-kafka - Kafka Connect 集群只有一个节点响应 REST API 请求
- node.js - mongodb node js中的外键和主键关系
- apache2 - 将 prefork 更改为 worker 的问题
- python - 如何让这个 for 循环跳过没有与会者和基于 domain.com 的外部与会者的会议?
- c++11 - C 和 C++ 之间的单个程序在行为上有什么不同?
- c# - C# PictureBox.Image 参数无效
- angular - 从角度版本 7 更新到版本 8 后无法 ng 服务,在 95% 不是目录后给出错误
- javascript - Discord bot 不更新时间,仅在开始运行时继续打印时间(Node/Javascript)
- python - 不知道如何在 pandas 中使用函数?即使我传递了正确的参数,也得到了关键错误
- algorithm - 删除链表中的重复节点