如何在 运行 调度程序进行网络抓取时避免错误?
How to avoid error while running scheduler for web-scraping?
我需要通过 scraping 收集一些数据(合法),所以现在在我自己的着陆页上测试脚本。目标是在 3 小时内获取标签中的特定文本(在我的示例中它只是一个句子)一次。我每 1 秒测试一次代码(因此希望看到 5 行“СОСТАВЛЯЕМ СМЕТЫ”5 秒)。但是代码的执行只写了一次短语,之后 returns 出错了。
import schedule
import time
from urllib.request import urlopen
from bs4 import BeautifulSoup
mf = open("C:\Users\Admin\Desktop\huyandex.txt",'a')
def job():
html = urlopen("https://smeta-spb.com/")
#print(html.read())
bsObj = BeautifulSoup(html)
nameList = bsObj.findAll("h1")
#print(len(nameList))
for name in nameList:
mf.write(name.get_text())
mf.write('\n')
mf.close()
schedule.every(5).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
但出现错误:
I/O operation on closed file.
如何转换代码以便我可以将内容写入文件?
您可以简单地在循环中打开一个文件,从循环开始处删除 open 语句并将其移动到循环中,这样您的代码就可以像这样:
import schedule
import time
from urllib.request import urlopen
from bs4 import BeautifulSoup
def job():
mf=open("huyandex.txt",'a') # moved it inside the function
html = urlopen("https://smeta-spb.com/")
#print(html.read())
bsObj = BeautifulSoup(html)
nameList = bsObj.findAll("h1")
#print(len(nameList))
for name in nameList:
mf.write(name.get_text())
mf.write('\n')
mf.close()
schedule.every(5).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
我需要通过 scraping 收集一些数据(合法),所以现在在我自己的着陆页上测试脚本。目标是在 3 小时内获取标签中的特定文本(在我的示例中它只是一个句子)一次。我每 1 秒测试一次代码(因此希望看到 5 行“СОСТАВЛЯЕМ СМЕТЫ”5 秒)。但是代码的执行只写了一次短语,之后 returns 出错了。
import schedule
import time
from urllib.request import urlopen
from bs4 import BeautifulSoup
mf = open("C:\Users\Admin\Desktop\huyandex.txt",'a')
def job():
html = urlopen("https://smeta-spb.com/")
#print(html.read())
bsObj = BeautifulSoup(html)
nameList = bsObj.findAll("h1")
#print(len(nameList))
for name in nameList:
mf.write(name.get_text())
mf.write('\n')
mf.close()
schedule.every(5).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
但出现错误:
I/O operation on closed file.
如何转换代码以便我可以将内容写入文件?
您可以简单地在循环中打开一个文件,从循环开始处删除 open 语句并将其移动到循环中,这样您的代码就可以像这样:
import schedule
import time
from urllib.request import urlopen
from bs4 import BeautifulSoup
def job():
mf=open("huyandex.txt",'a') # moved it inside the function
html = urlopen("https://smeta-spb.com/")
#print(html.read())
bsObj = BeautifulSoup(html)
nameList = bsObj.findAll("h1")
#print(len(nameList))
for name in nameList:
mf.write(name.get_text())
mf.write('\n')
mf.close()
schedule.every(5).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)