Запись в csv, поиск по тэгу

479 просмотра
0
0 Комментариев

#! 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 Ответы

Python Опубликовано 09.12.2018
0

Код должен выглядеть как-то так:

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) совершенно лишний.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up