Колличество совпадений ключей по сайтам

категория: Python
Дается экселевский файл in.csv формата такого: string, url buy a car, http://link toyota, http://link ford f-150 tremor, http://link github, http://www.acman.ru/ Нужно вернуть экселевский файл out.csv, в котором будет подсчитано сколько раз используется ключ на сайте, тоесть добавить еще одно поле 'count'. Ключ может быть в разных регистрах, "buy a car" = "Buy A Car" Использую requests и BeautifulSoup. 1. Открываю файл (get_info_from_csv), засовую ключи в список "strings", ссылки в "urls" 2. Перебираю списки, парсю url по соответствующей string (parse_url). Подсчитываю количество совпадений, возвращаю список со списком результатов. 3. Записываю в out.csv полученные из parse_url() значения. Сделал, как по мне, довольно криво, так что критика приветствуется. Код:
import re
import csv
#
from requests import get
from bs4 import BeautifulSoup
#
input_path = "in.csv"
output_path = "out.csv"
split_tag = ','
#
#
def get_info_from_csv(input_path, split_tag):
    """
    Return list of STRING and URL lists
    """
    strings = []
    urls = []
    with open(input_path) as f_in:
        for line in f_in:
            string, url = line.split(split_tag)
            strings.append(string)
            urls.append(url.rstrip('\n'))
    return [strings[1:], urls[1:]]
#
#
def parse_url():
    """
    Return list of strings with result
    """
    results = [['String', 'URL', 'Count'], ]
    strings, urls = get_info_from_csv(input_path, split_tag)
    for url_index, url in enumerate(urls):
        content = get(url)
        soup = BeautifulSoup(content.text.lower())
        count = len(soup.find_all(text=re.compile(strings[url_index])))
        results.append([strings[url_index], url, count])
    return results
#
#
def write2csv(output_path, split_tag):
    """
    Write data to csv file
    """
    with open(output_path, 'w') as f_out:
        writer = csv.writer(f_out, delimiter=split_tag)
        writer.writerows(parse_url())
#
if __name__ == '__main__':
    write2csv(output_path, split_tag)


blog comments powered by Disqus