
#! usr/bin python3 import csv import urllib.request from bs4 import BeautifulSoup def get_html(url): response = urllib.request.urlopen(url) return response.read() f = open('text.txt', 'r') l = [line.strip() for line in f] def parse(html): soup = BeautifulSoup(html) search = soup.find('div', class_='search-total js-search-total') span = soup.find('span', class_='search-message js-page-title') spantext = span.text searchtext = search.text save (searchtext, spantext, 'project.csv') def save(searchtext, spantext, path): with open(path, 'w') as csvfile: writer = csv.writer(csvfile) writer.writerow(('Название', 'Кол-во')) for row in l: writer.writerow((spantext, searchtext)) csvfile.close() def main(): for url in l: parse(get_html(url)) if __name__ == '__main__': main()
В project.csv в итоге получается 2 строчки с одинаковыми данными, хотя 2 урла в text.txt разные , и данные в них , соответственно, тоже разные.
Куда посоветуете обратить внимание ?
p.s. может кто-нибудь знает, каким образом можно проверить наличие того или иного тега в html ?
1 Ответы


Код должен выглядеть как-то так:
def parse(html): soup = BeautifulSoup(html) search = soup.find('div', class_='search-total js-search-total') span = soup.find('span', class_='search-message js-page-title') return span.text, search.text def save(search, span, writer): writer.writerow(span, search) def main(): with open('text.txt', 'r') as f: with open('project.csv', 'w') as csvfile: writer = csf.writer(csvfile) writer.writerow('Name', 'Amount') for line in f: span, search = parse(get_html(line.strip())) save(search, span, writer)
Кстати, раз уж вы так pythonic
используете with
, close(csvfile)
совершенно лишний.