Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python抓取在睡眠状态下退出,计数错误_Python_Python 3.x - Fatal编程技术网

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

我想每10分钟运行一次下面的程序,但10分钟后程序将以“Code=0”退出。我还想为除writeheader之外的每一行添加一个ID,这是有效的,但在其他条目上它会计算所有行

如何让此程序每10分钟运行一次? 除了writeheader行,我如何只计算该行

我对Python很陌生,很可能这不是一个市长的问题

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的帮助。这比我想修复的更容易。