Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 22, 2017 23:11:09

heyyyy
Зарегистрирован: 2017-01-22
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись csv файла

Здравствуйте. Пишу парсер по сбору proxy:

 #!/usr/bin/env python3
import csv
import requests
from bs4 import BeautifulSoup
base_url = 'http://foxtools.ru/Proxy'
def get_html(url):
    r = requests.get(url)
    return r.text
def parse(html):
    soup = BeautifulSoup(html, 'lxml')
    table = soup.find('table', id='theProxyList')
    projects = []
    for row in table.find_all('tr')[1:]:
        cols = row.find_all('td')
        projects.append({
            'ip': cols[1].text,
            'port': cols[2].text
        })
    return projects
def get_pages(html):
    soup = BeautifulSoup(html, 'lxml')
    paggination = soup.find('div', class_='pager')
    number = paggination.find_all('a')[-1].text
    return int(number[1:3])
def save(projects):
    with open('proxy.csv', 'w') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(('ip', 'port'))
        for project in projects:
            #print(project)
            writer.writerow((projects['ip'],projects['port']))
def main():
    page_count = get_pages(get_html(base_url))
    print('Всего страниц {}'.format(page_count))
    projects = []
    for page in range(1, page_count+1):
        print('Парсинг %d%%' % (page / page_count * 100))
        projects.extend(parse(get_html(base_url + '?page=%d' % page)))
    #print(projects)
    save(projects)
if __name__ == '__main__':
    main()
Вылезает ошибка:
 Traceback (most recent call last):
  File "/home/heyyyoyy/Рабочий стол/proxy_list.py", line 60, in <module>
    main()
  File "/home/heyyyoyy/Рабочий стол/proxy_list.py", line 56, in main
    save(projects)
  File "/home/heyyyoyy/Рабочий стол/proxy_list.py", line 43, in save
    writer.writerow((projects['ip'],projects['port']))
TypeError: list indices must be integers or slices, not str
Подскажите плиз в чем проблема

Офлайн

#2 Янв. 22, 2017 23:54:47

Stright
От: Кострома
Зарегистрирован: 2015-01-20
Сообщения: 139
Репутация: +  16  -
Профиль   Отправить e-mail  

Запись csv файла

А traceback вам ни о чем не говорит?

        for project in projects:
            #print(project)
            writer.writerow((project['ip'],project['port']))

Офлайн

#3 Янв. 23, 2017 00:21:41

heyyyy
Зарегистрирован: 2017-01-22
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись csv файла

Stright
А traceback вам ни о чем не говорит?
Ну дак я пробегаю по словарям внутри списка. Что тут не так?

Офлайн

#4 Янв. 23, 2017 01:15:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Запись csv файла

heyyyy
Подскажите плиз в чем проблема
Надо писать project, а не projects.



Офлайн

#5 Янв. 23, 2017 08:46:32

heyyyy
Зарегистрирован: 2017-01-22
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись csv файла


Спасибо большое, заработало ) глупая ошибка конечно

Отредактировано heyyyy (Янв. 23, 2017 08:47:01)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version