Python循环覆盖最后一次HTML写入
该脚本在“while True:”处循环,通过单击底部的“next”(下一步)按钮从多个页面中提取数据,但我不知道如何构造代码,以便在分页时继续写入HTML。相反,它会覆盖以前编写的html结果。谢谢你的帮助。谢谢Python循环覆盖最后一次HTML写入,python,selenium,Python,Selenium,该脚本在“while True:”处循环,通过单击底部的“next”(下一步)按钮从多个页面中提取数据,但我不知道如何构造代码,以便在分页时继续写入HTML。相反,它会覆盖以前编写的html结果。谢谢你的帮助。谢谢 while True: time.sleep(10) golds = driver.find_elements_by_css_selector(".widgetContainer #widgetContent > div.singleCell") pr
while True:
time.sleep(10)
golds = driver.find_elements_by_css_selector(".widgetContainer #widgetContent > div.singleCell")
print("found %d golds" % len(golds))
template = """\
<tr class="border">
<td class="image"><img src="{0}"></td>\
<td class="title"><a href="{1}" target="_new">{2}</a></td>\
<td class="price">{3}</td>
</tr>"""
lines = []
for gold in golds:
goldInfo = {}
goldInfo['title'] = gold.find_element_by_css_selector('#dealTitle > span').text
goldInfo['link'] = gold.find_element_by_css_selector('#dealTitle').get_attribute('href')
goldInfo['image'] = gold.find_element_by_css_selector('#dealImage img').get_attribute('src')
try:
goldInfo['price'] = gold.find_element_by_css_selector('.priceBlock > span').text
except NoSuchElementException:
goldInfo['price'] = 'No price display'
line = template.format(goldInfo['image'], goldInfo['link'], goldInfo['title'], goldInfo['price'])
lines.append(line)
try:
#clicks next button
driver.find_element_by_link_text("Next→").click()
except NoSuchElementException:
break
time.sleep(10)
html = """\
<html>
<body>
<table>
<tr class='headers'>
<td class='image'></td>
<td class='title'>Product</td>
<td class='price'>Price / Deal</td>
</tr>
</table>
<table class='data'>
{0}
</table>
</body>
</html>\
"""
f = open('./result.html', 'w')
f.write(html.format('\n'.join(lines)))
f.close()
为True时:
时间。睡眠(10)
golds=driver.find_elements_by_css_选择器(“.widgetContainer#widgetContent>div.singleCell”)
打印(“找到%d个黄金”%len(黄金))
模板=“”“\
\
\
{3}
"""
行=[]
对于黄金中的黄金:
goldInfo={}
goldInfo['title']=gold.find_element_by_css_selector('#dealTitle>span')。text
goldInfo['link']=gold.find_element_by_css_selector('#dealTitle')。get_属性('href'))
goldInfo['image']=gold.find_element_by_css_selector('dealImage img')。get_属性('src'))
尝试:
goldInfo['price']=gold.find_element_by_css_选择器('.priceBlock>span')。text
除无任何例外:
goldInfo['price']=“无价格显示”
line=template.format(goldInfo['image']、goldInfo['link']、goldInfo['title']、goldInfo['price'])
行。追加(行)
尝试:
#单击“下一步”按钮
驱动程序。通过链接文本(“下一步”)查找元素→").单击()
除无任何例外:
打破
时间。睡眠(10)
html=”“”\
产品
价格/交易
{0}
\
"""
f=打开('./result.html',w')
f、 写入(html.format('\n'.join(行)))
f、 关闭()
您应该通过
f = open('./result.html', 'a')
在脚本末尾打开文件时,请查看不同的模式: mode最常用的值是'r'用于读取,'w'用于写入(如果文件已经存在,则截断该文件),以及'a'用于追加 还有更多 模式“r+”、“w+”和“a+”打开文件进行更新(读写);请注意,“w+”会截断文件。在区分二进制文件和文本文件的系统上,将“b”附加到模式以二进制模式打开文件;在没有此区别的系统上,添加“b”无效 因此,您有两个可用的选项。您可以使用
a
,因为您希望向其添加数据
或者,您可以将打开的文件移到循环之外,这样您就不会根据需要不断地重新打开文件
f = open('./result.html', 'w')
while True:
# do stuff
f.write (...)
f.close()
试着用
f=open('./result.html',w')
替换f=open('./result.html',a')
谢谢Andersson,太好了。你想把它作为我能接受这个答案的答案吗?我想这会提供更多信息