-
Notifications
You must be signed in to change notification settings - Fork 2
/
1_read_paper_json.py
104 lines (90 loc) · 3.17 KB
/
1_read_paper_json.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import os
import sys
import argparse
import datetime
from scrapy.crawler import CrawlerProcess
from allris.spiders.oparl import OparlSpider
from pathlib import Path
def output_file_name():
now = datetime.datetime.now().strftime("%Y-%m-%dT%H-%M-%S")
name = "{}_{}.jl".format("paper", now)
return name
settings = {
"HTTPCACHE_ENABLED": True,
"LOG_LEVEL": "INFO",
"CLOSESPIDER_PAGECOUNT": 5000,
"ITEM_PIPELINES": {
"allris.pipelines.leipzig.FixWebUrlPipeline": 200,
"allris.pipelines.leipzig.AddOriginatorPipeline": 300,
},
"FEEDS": {
Path(".").parent.absolute() / "data" / output_file_name(): {
"format": "jsonlines"
},
},
}
spargs = {
"body_url": "https://ratsinformation.leipzig.de/allris_leipzig_public/oparl/bodies?id=2387",
"allowed_domains": ["ratsinformation.leipzig.de"],
"object_type": "paper",
}
parser = argparse.ArgumentParser(description='Vorlagen aus dem Leipziger Stadtrat prozessieren')
params = [
{
"command_arg": "modified_from",
"env_arg": "MODIFIED_FROM",
"spider_arg": "modified_from",
"default": "2023-01-01T00:00:00",
"help": "erfasst nur Vorlagen, die nach einschießlich dem angegebenen Datum modifiziert worden sind, default 2023-01-01T00:00:00, bricht den kompletten Erfassungsprozess ab, wenn eine ältere Vorlage gefunden wird"
},
{
"command_arg": "modified_to",
"env_arg": "MODIFIED_TO",
"spider_arg": "modified_to",
"default": (datetime.datetime.utcnow() + datetime.timedelta(days=1)).strftime("%Y-%m-%dT00:00:00"),
"help": "erfasst nur Vorlagen, die vor einschießlich dem angegebenen Datum modifiziert worden sind, default Datum vom morgigen Tag"
},
{
"command_arg": "page_from",
"env_arg": "PAGE_FROM",
"spider_arg": "page_from",
"default": 1,
"help": "erfasst nur Vorlagen, die auf Seiten größergleich der angegebenen stehen (jeweils 20 Vorlagen pro Seite), default 1"
},
{
"command_arg": "page_to",
"env_arg": "PAGE_TO",
"spider_arg": "page_to",
"default": 10,
"help": "erfasst nur Vorlagen, die auf Seiten kleinergleich der angegebenen stehen (jeweils 20 Vorlagen pro Seite), default 10"
}
]
for entry in params:
parser.add_argument('--' + entry['command_arg'],
dest=entry['spider_arg'],
action='store',
default=entry['default'],
help=entry['help'])
args = parser.parse_args()
parsed = {
"modified_from": args.modified_from,
"modified_to": args.modified_to,
"page_from": args.page_from,
"page_to": args.page_to
}
for entry in params:
key = entry['command_arg']
env_key = entry['env_arg']
value = parsed[key]
if value is not None:
spargs[key] = value
elif env_key in os.environ:
spargs[key] = os.environ[env_key]
process = CrawlerProcess(settings)
crawler = process.create_crawler(OparlSpider)
process.crawl(crawler, **spargs)
process.start()
if crawler.stats:
failed = crawler.stats.get_value('log_count/ERROR')
if failed:
sys.exit(1)