我对Python很新,所以我可以使用一些帮助。我基本上是为了满足自己的个人需求而构建了一个小型的Web抓取工具,一切都很好,直到我想将抓取的数据写入自己的文件。给定一个包含80个URL的列表,循环将停止创建新文件但仍继续收集数据。我通过将所有数据汇集到一个文件中来测试循环,这非常有效,但我确实需要创建单独的文件。循环将创建38个单独的文件,而不是我需要的80个文件。任何人都可以帮我找出原因吗?我的代码如下:
while i < len(urls_to_scrape):
with urllib.request.urlopen(urls_to_scrape[i]) as response:
html = response.read()
smashsoup = BeautifulSoup(html,'html.parser')
title = smashsoup.find('h1').get_text()
author = smashsoup.find('a', {'itemprop':'author'}).get_text();
complete_title = title +' By '+ author
filename = hashlib.md5(complete_title.encode('utf-8')).hexdigest() + ".txt"
imgname = hashlib.md5(complete_title.encode('utf-8')).hexdigest() + ".jpg"
short_desc = smashsoup.find('div', {'itemprop':'description'}).get_text();
try:
long_desc = smashsoup.find('div', {'id':'longDescription'}).get_text();
except:
long_desc = ""
cats = smashsoup.find('div', {'itemprop':'genre'})
category = ""
for cat in cats.find_all('a'):
category += cat.get_text() + " - "
img = smashsoup.find('img',{'itemprop':'image'})
source = img.get('src');
nsource = source.replace('-thumb','')
#compile everything into a single text document
fo = open(filename,'a')
fo.write(str(complete_title.encode('ascii','ignore'))+"\n\n")
fo.write(str(short_desc.encode('ascii','ignore'))+"\n\n")
fo.write(str(long_desc.encode('ascii','ignore'))+"\n\n")
fo.write(category+"\n\n")
fo.flush()
fo.close()
i += 1
答案 0 :(得分:0)
非常感谢@jbet。您的评论让我回过头来重新检查我正在抓取的页面。事实证明,网站上实际上有几个相同的条目,所以很明显,当我试图为每个条目创建一个单独的文件时它已经重复并导致文件写入过程停止但循环继续。我的解决方案是在对文件进行哈希处理之前为文件名添加时间戳,现在创建所有条目。