Python抓取在睡眠状态下退出,计数错误
我想每10分钟运行一次下面的程序,但10分钟后程序将以“Code=0”退出。我还想为除writeheader之外的每一行添加一个ID,这是有效的,但在其他条目上它会计算所有行 如何让此程序每10分钟运行一次? 除了writeheader行,我如何只计算该行 我对Python很陌生,很可能这不是一个市长的问题Python抓取在睡眠状态下退出,计数错误,python,python-3.x,Python,Python 3.x,我想每10分钟运行一次下面的程序,但10分钟后程序将以“Code=0”退出。我还想为除writeheader之外的每一行添加一个ID,这是有效的,但在其他条目上它会计算所有行 如何让此程序每10分钟运行一次? 除了writeheader行,我如何只计算该行 我对Python很陌生,很可能这不是一个市长的问题 import time import smtplib import lxml import requests from bs4 import BeautifulSoup import csv
import time
import smtplib
import lxml
import requests
from bs4 import BeautifulSoup
import csv
import re
from datetime import datetime
import os.path
URL = 'https://stockx.com/de-de/supreme-jostens-world-famous-champion-ring-gold'
INTERVAL = 10
headers = {
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'}
page = requests.get(URL, headers=headers)
soup = BeautifulSoup(page.content, "lxml")
search_for_class = soup.find_all(
'div', class_="sale-value")
print(search_for_class)
x = str(soup.find('div', class_="sale-value"))
preis = str(re.sub("<.*?>", "", x))
print(preis)
datum = datetime.now().strftime('%Y-%m-%d')
uhrzeit = datetime.now().strftime('%H:%M:%S')
print(datum)
print(uhrzeit)
file_exists = os.path.isfile("test_file.csv")
if not file_exists:
open('test_file.csv', 'w+')
with open('test_file.csv', 'r+') as csv_file:
fieldnames = ['ID', 'Datum', 'Uhrzeit', 'Preis']
writer = csv.DictWriter(
csv_file, fieldnames=fieldnames, lineterminator='\n')
entry = len(csv_file.readlines()) + 1
# csv_file.write("\n")
if not file_exists:
writer.writeheader()
writer.writerow({
'ID': entry,
'Datum': datum,
'Uhrzeit': uhrzeit,
'Preis': preis
})
csv_file.close()
time.sleep(INTERVAL * 60)
导入时间
导入smtplib
导入lxml
导入请求
从bs4导入BeautifulSoup
导入csv
进口稀土
从日期时间导入日期时间
导入操作系统路径
URL='1〕https://stockx.com/de-de/supreme-jostens-world-famous-champion-ring-gold'
间隔=10
标题={
“用户代理”:“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/79.0.3945.79 Safari/537.36”
page=requests.get(URL,headers=headers)
汤=美汤(page.content,“lxml”)
搜索\u以查找\u class=soup.find\u all(
“div”,class=“销售价值”)
打印(搜索\u类)
x=str(soup.find('div',class=“sale value”))
preis=str(re.sub(“,”,x))
打印(preis)
datum=datetime.now().strftime(“%Y-%m-%d”)
uhrzeit=datetime.now().strftime(“%H:%M:%S”)
打印(基准)
印刷品(uhrzeit)
file_exists=os.path.isfile(“test_file.csv”)
如果文件不存在:
打开('test_file.csv','w+'))
打开('test_file.csv','r+')作为csv_文件:
字段名=['ID'、'Datum'、'Uhrzeit'、'Preis']
writer=csv.writer(
csv_文件,字段名=字段名,行终止符='\n')
entry=len(csv_file.readlines())+1
#csv\u文件。写入(“\n”)
如果文件不存在:
writer.writeheader()
writer.writerow({
“ID”:条目,
“基准”:基准,
“Uhrzeit”:Uhrzeit,
“Preis”:Preis
})
csv_文件.close()
睡眠时间(间隔*60)
要使其每10分钟运行一次,请在应重复运行的所有内容周围放置一个循环
要使ID
计数正确,您可以在第一次创建文件时,在如果文件不存在:
块中写入标题行。这样,条目
计数将始终包括标题行
作为简化,可以在循环之前打开文件一次。然后通过循环每次递增entry
。使用csv\u file.flush()
确保新行已写入文件
import time
import smtplib
import lxml
import requests
from bs4 import BeautifulSoup
import csv
import re
from datetime import datetime
import os.path
URL = 'https://stockx.com/de-de/supreme-jostens-world-famous-champion-ring-gold'
INTERVAL = 10
headers = {
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'}
file_exists = os.path.isfile("test_file.csv")
if not file_exists:
with open('test_file.csv', 'w+') as f:
f.write('ID,Datum,Uhrzeit,Preis\n')
with open('test_file.csv', 'r+') as csv_file:
fieldnames = ['ID', 'Datum', 'Uhrzeit', 'Preis']
writer = csv.DictWriter(
csv_file, fieldnames=fieldnames, lineterminator='\n')
entry = len(csv_file.readlines())
while True:
page = requests.get(URL, headers=headers)
soup = BeautifulSoup(page.content, "lxml")
search_for_class = soup.find_all(
'div', class_="sale-value")
print(search_for_class)
x = str(soup.find('div', class_="sale-value"))
preis = str(re.sub("<.*?>", "", x))
print(preis)
datum = datetime.now().strftime('%Y-%m-%d')
uhrzeit = datetime.now().strftime('%H:%M:%S')
print(datum)
print(uhrzeit)
writer.writerow({
'ID': entry,
'Datum': datum,
'Uhrzeit': uhrzeit,
'Preis': preis
})
csv_file.flush()
entry += 1
time.sleep(INTERVAL * 60)
导入时间
导入smtplib
导入lxml
导入请求
从bs4导入BeautifulSoup
导入csv
进口稀土
从日期时间导入日期时间
导入操作系统路径
URL='1〕https://stockx.com/de-de/supreme-jostens-world-famous-champion-ring-gold'
间隔=10
标题={
“用户代理”:“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/79.0.3945.79 Safari/537.36”
file_exists=os.path.isfile(“test_file.csv”)
如果文件不存在:
将open('test_file.csv','w+')作为f:
f、 写入('ID,Datum,Uhrzeit,Preis\n')
打开('test_file.csv','r+')作为csv_文件:
字段名=['ID'、'Datum'、'Uhrzeit'、'Preis']
writer=csv.writer(
csv_文件,字段名=字段名,行终止符='\n')
entry=len(csv\u file.readlines())
尽管如此:
page=requests.get(URL,headers=headers)
汤=美汤(page.content,“lxml”)
搜索\u以查找\u class=soup.find\u all(
“div”,class=“销售价值”)
打印(搜索\u类)
x=str(soup.find('div',class=“sale value”))
preis=str(re.sub(“,”,x))
打印(preis)
datum=datetime.now().strftime(“%Y-%m-%d”)
uhrzeit=datetime.now().strftime(“%H:%M:%S”)
打印(基准)
印刷品(uhrzeit)
writer.writerow({
“ID”:条目,
“基准”:基准,
“Uhrzeit”:Uhrzeit,
“Preis”:Preis
})
csv_file.flush()
条目+=1
睡眠时间(间隔*60)
设置为True:
从page=requests.get(URL,headers=headers)开始循环所有内容。
感谢Barmar的帮助。这比我想修复的更容易。