]> code.communitydata.science - wikia_userroles_scraper.git/blob - scraper_utils.py
0844b0bb7b5ff271e649cc68c196d22294f18e72
[wikia_userroles_scraper.git] / scraper_utils.py
1 # returns an iterator of wiki,url tuples
2 import pandas as pd
3 from os import makedirs, path
4 from shutil import rmtree
5 from itertools import islice
6
7
8 def _add_wikitype(tpl):
9     print(tpl)
10     wiki, url = tpl[0:2]
11     wikitype = "NA"
12
13     if "wikipedia.org" in url:
14         wikitype = "wikipedia"
15         url = url + '/w/'
16
17     elif "wikia.com" in url:
18         wikitype = 'wikia'
19
20     print(url)
21     print(wiki)
22     url = url.strip()
23     wiki = wiki.strip()
24     tpl = (wiki, url, wikitype)
25     return tpl
26
27
28 def read_wikilist(args):
29     if args.sep in ['\\t', '\t', 'tab', 't']:
30         sep = '\t'
31     else:
32         sep = args.sep
33
34     if not args.no_header:
35         wikilist = pd.read_table(args.wikilist, sep=sep)
36         wikilist = ((t.dbname, t.url)
37                     for t in wikilist.loc[:, ['dbname', 'url']].itertuples())
38
39     else:
40         j, k = [int(i) for i in args.i.split(',')[0:2]]
41         print(args.i)
42         wikilist = open(args.wikilist)
43         wikilist = (line.split(sep) for line in wikilist)
44         wikilist = ((fields[j], fields[k]) for fields in wikilist)
45         wikilist = islice(wikilist, 1, None)
46
47     wikilist = (_add_wikitype(t) for t in wikilist)
48     return wikilist
49
50
51 def add_parser_arguments(parser):
52     parser.add_argument('--no-header', action='store_true',
53                         help='does the wikilist have no header?')
54
55     parser.add_argument('--nuke-old', action='store_true',
56                         help='remove old files.')
57
58     parser.add_argument('--sep', type=str,
59                         help='input table delimiter', default=',')
60
61     parser.add_argument(
62         'wikilist',
63         type=str,
64         help='path to the input file: a wiki list with wiki\turl\filename')
65
66     parser.add_argument(
67         'output',
68         type=str,
69         help='path to put the logs we scrape e.g. /com/projects/messagewalls/allusers/')
70
71     parser.add_argument('-i',
72                         type=str,
73                         help='<j,k> two 0-based indices for wiki and url in the csv, default=0,1',
74                         default='0,1')
75
76     return(parser)
77
78
79 def prepare_output(output_path, nuke_old):
80     if not path.exists(output_path):
81         makedirs(output_path)
82     if nuke_old:
83         rmtree(output_path)
84     if not path.exists(output_path):
85         makedirs(output_path)

Community Data Science Collective || Want to submit a patch?