计数URL的控制台,而不是进度条
我目前运行一个进度条作为web刮刀的一部分,但它显得既计数URL的控制台,而不是进度条
(A)不准确 (B)缓慢的过程是什么。
with click.progressbar(range(1000000)) as bar:
for i in bar:
pass
是否有文章/培训,我将能够阅读以更好地了解打印进度到控制台?
我有效地希望程序扫描列表中的网址,然后打印的进展,因为它遍历列表,沿着
扫描URL 1的30
扫描线的东西的30扫描URL 3 30的
如果可能的话,保持对同一行,但不是必需的。
代码如下 - 如果有人能与任何培训或阅读帮助,我们将不胜感激。
import requests
import csv
from lxml import html
URL_LIST = [
"https://www.realestate.com.au/property/1-1-goldsmith-st-elwood-vic-3184",
"https://www.realestate.com.au/property/1-10-albion-rd-glen-iris-vic-3146",
"https://www.realestate.com.au/property/1-109-sydney-rd-manly-nsw-2095",
"https://www.realestate.com.au/property/1-1110-glen-huntly-rd-glen-huntly-vic-3163",]
with open('test.csv', 'wb') as csv_file:
writer = csv.writer(csv_file)
for index, url in enumerate(URL_LIST):
page = requests.get(url)
print 'scanning url....'
if text2search in page.text:
tree = html.fromstring(page.content)
(title,) = (x.text_content() for x in tree.xpath('//title'))
(price,) = (x.text_content() for x in tree.xpath('//div[@class="property-value__price"]'))
(sold,) = (x.text_content().strip() for x in tree.xpath('//p[@class="property-value__agent"]'))
writer.writerow([title, price, sold])
如果你要打印比进度条的指标其他多远沿着你展示,最简单的很可能是做定期打印。
由于该问题的代码是为Python 2,我本来与Python代码2回答,但是这个问题可以很容易拿出来的Python 3级的用户,所以我增加了一节对他们来说太。
一种Python的2
版本以下基于并应补充的问题的代码:
for index, url in enumerate(URL_LIST):
print 'Scanning url #' + str(index+1) + ' of ' + str(len(URL_LIST))
您还可以选择添加你使用url
可变扫描的网址您for
循环产生。
另外,如果你想有每个打印替换最后一个,你可以添加一个逗号,
到打印语句的结束,以及\r
字符添加到开头:
for index, url in enumerate(URL_LIST):
print '\rScanning url #' + str(index+1) + ' of ' + str(len(URL_LIST)),
逗号防止print
从一开始加入新行字符(\n
)到最后,和\r
(“回车”)删除已经打印行的其余部分之前是什么就行了。
的差异print
之间的Python 2 &的Python 3
需要注意的是print
功能在Python 2和Python 3完全不同的上述 'Python的2' 解决方案将不会出现在Python 3
首先,Python 3中的print
是一个函数,而不是关键字,所以它必须被称为函数(即print('Print me!')
),其次,将逗号添加到最后不会阻止新行字符的输出。 通常包括在端部具有逗号将没有可见效果然而解释是评估它(如包含单个None
的元组)使用Python REPL时可以看出。相反,必须向print
函数提供一个命名参数(名为end
)以覆盖它的默认值。
一个为Python 3
版本下面是一个Python 3相当于我在这个答案的上方提供的代码:
for index, url in enumerate(URL_LIST):
print('Scanning url #' + str(index+1) + ' of ' + str(len(URL_LIST)))
如果你想有每个打印重复使用相同的路线,如上面的第二个例子:
for index, url in enumerate(URL_LIST):
print('\rScanning url #' + str(index+1) + ' of ' + str(len(URL_LIST)), end='')
如果你没看过上面的一切,请注意end=''
被重写print
functi on的默认操作是在每行的末尾添加一个\n
(换行符)字符,以便它添加一个空字符串,并且字符串开头的\r
(回车)字符会导致Python返回到行来打印字符串的其余部分。
这正是我正在寻找的,只需要缩短一点,并删除URL的打印,但这足以让我自己成长。 – James2086
刚刚删除最后一节 - 所以现在读取 '扫描URL#'+ str(索引+ 1)+'的'+ str(len(URL_LIST)) 输出为 正在扫描URL#1 of 7 – James2086
没有找一个简单的答案,因为我喜欢尝试为自己工作 - 但是有没有一种方法,以便在同一行上打印而不是回车? – James2086