in outer loop i=156 ,it is not looping for other values of i=1,2,3,4.......我试图在scrapy python中运行这个for循环。但是第一个循环不起作用
for i in range(1,157):
start_urls = ["https://appworld.blackberry.com/cas/producttype/apps?"
"countryid=100&lang=en&page={}&pagesize={}&"
"sortby=popular&licensetype=all&callback=_producttype_apps"
"&_=1499255634459".format(i, page) for page in xrange(1,1001)]
start_urls外的第一个循环不起作用 所需的结果是这样的,因为page = 1 pagesize应该从1到1000运行,而page = 2 pagesize应该再次从1运行到1000,依此类推,直到page = 156
答案 0 :(得分:2)
您错误地使用了try {
ProcessBuilder pb = new ProcessBuilder("7z", "e", "bootstrap.7z", "-so", "bootstrap.txt");
Process p = pb.start();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
writer.write("password" + "\n");
writer.flush();
writer.close();
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
格式字符串,您可以创建<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:key name="key-bill" match="shippingBill" use="shippingBillNo" />
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="shippingBills">
<xsl:variable name="distinct-bills" select="shippingBill[generate-id() = generate-id(key('key-bill', shippingBillNo)[1])]" />
<checkSum>
<noOfInvoices>
<xsl:value-of select="count(shippingBill/invoice)" />
</noOfInvoices>
<noOfShippingBills>
<xsl:value-of select="count($distinct-bills)" />
</noOfShippingBills>
</checkSum>
<xsl:copy>
<xsl:apply-templates select="$distinct-bills" mode="group" />
</xsl:copy>
</xsl:template>
<xsl:template match="shippingBill" mode="group">
<shippingBill>
<xsl:apply-templates select="*[not(self::invoice)]" />
<invoices>
<xsl:apply-templates select="key('key-bill', shippingBillNo)/invoice" />
</invoices>
</shippingBill>
</xsl:template>
</xsl:stylesheet>
,但可能更容易使用%
。您还可以拆分字符串以获得更好的格式:
tuple()
答案 1 :(得分:1)
你好Emon,
试试这段代码, 在下面的代码中使用“\”,所以不要混淆,因为它用于多行代码编写,这个功能是python内置提供的。
for i in range(1,157):
start_urls = ['https://appworld.blackberry.com/cas/producttype/apps?' \
'countryid=100&lang=en&' \
'page=%d' \
'&pagesize=%s'\
'&sortby=popular&licensetype=all&callback=_producttype_apps&_=1499255634459' % (i,page) for page in xrange(1,1001)]
# Display starts_urls
print(start_urls)
使用格式方法
按位置访问参数
for i in range(1,157):
start_urls = ['https://appworld.blackberry.com/cas/producttype/apps?' \
'countryid=100&lang=en&' \
'page={0}' \
'&pagesize={1}' \
'&sortby=popular&licensetype=all&callback=_producttype_apps&_=1499255634459'.format(i,page) for page in xrange(1,1001)]
当你使用long任何类型的字符串/内容时,我建议使用format method
因为你很容易理解代码。
以下链接的更多示例读取,
1. https://wiki.python.org/moin/ForLoop
2. https://www.codeproject.com/Tips/820236/Python-String-Formatting-Using-format-Method
我希望我的回答很有帮助。如有任何问题请征求意见。
答案 2 :(得分:0)
你可能想要做的是
start_urls = ["https://appworld.blackberry.com/cas/producttype/apps?"
"countryid=100&lang=en&page={}&pagesize={}&"
"sortby=popular&licensetype=all&callback=_producttype_apps"
"&_=1499255634459".format(i, page) for page in xrange(1,1001) for i in range(1,157)]
如果订单很重要,你可以通过反转for循环来反过来:
start_urls = ["https://appworld.blackberry.com/cas/producttype/apps?"
"countryid=100&lang=en&page={}&pagesize={}&"
"sortby=popular&licensetype=all&callback=_producttype_apps"
"&_=1499255634459".format(i, page) for i in range(1,157) for page in xrange(1,1001)]
你以不同的方式使用两个不同的循环 - 你使用外部for循环是错误的。想一想:
for i in range(10):
x = i
对于每次迭代,您将变量x赋值为i,但在执行任何其他操作之前,请将其重新分配给下一个i。这基本上就是你在代码中所做的事情。
替代方案包括附加到列表:
x = []
for i in range(10):
x.append(i)
或您在代码中使用的列表推导
x = [i for i in range(10)]
显然这些都是愚蠢的例子,因为它们只是从range(10)
答案 3 :(得分:-1)
首先尝试将列表转换为元组 然后寻找格式化敏感的影响。