关于使用.format()出现乱序的问题
前景提要
在用网络爬虫爬取斗破苍穹小说的时候,发现构建多页URLS时,URLS的顺序不是按照1,2,3,4…的顺序排列,而是处于3,2,4,8,1…这种无序的状态。其他的写入TXT文档等,都可以正常工作,此时写入txt的文章顺序是打乱的,但是都可以都可以爬下来。
经检查后发现是一个很小的问题导致了这种情况。
错误的代码
import requests
import re
import time
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134'
}
f=open('doupocangqiong.txt','a+')
def get_info(url):
res=requests.get(url,headers=headers)
if res.status_code==200:
contents=re.findall('<p>(.*?)</p>',res.content.decode('utf-8'))
for content in contents:
f.write(content+'\n')
else:
pass
if __name__=='__main__':
urls={'http://www.doupoxs.com/doupocangqiong/{}.html'.format(number) for number in range(1, 1666)}
for url in urls:
get_info(url)
print(url)
f.close()
此时输出的结果是乱序的
urls也是乱序。
import requests
import re
import time
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134'
}
f=open('doupocangqiong.txt','a+')
def get_info(url):
res=requests.get(url,headers=headers)
if res.status_code==200:
contents=re.findall('<p>(.*?)</p>',res.content.decode('utf-8'))
for content in contents:
f.write(content+'\n')#这个地方还是有一点不是特别明白
else:
pass
if __name__=='__main__':
urls=['http://www.doupoxs.com/doupocangqiong/{}.html'.format(number) for number in range(1, 1666)]
for url in urls:
get_info(url)
print(url)
f.close()
此时输出的代码是正确的。
错误原因
构造多页URLS时使用了URLS={ }构造了一个类似字典的东西,于是就导致了乱序的发生。
解决方法
将URLS={ }
换成URLS=【】就可以解决掉乱序的问题,成功输出顺序的小说。。