Парсер не сохраняет результат в CSV - Python
Формулировка задачи:
Написал простенький парсер для сайта invest***.com, для экономического календаря.
Проблема в том, что в файл сохраняется только 35 строка, а 36-ая уже игнорируется, не могу понять почему.
Я что-то не так делаю?
Листинг программы
- # -*- coding: utf-8 -*-
- import csv
- import urllib.request
- from bs4 import BeautifulSoup
- BASE_URL = 'https://ru.investing.com/economic-calendar/'
- REQ = urllib.request.Request(BASE_URL, headers={'User-Agent':"Magic Browser"})
- def get_html(url):
- response = urllib.request.urlopen(REQ)
- return response.read()
- def parse(html):
- soup = BeautifulSoup(html)
- table = soup.find('table', class_='genTbl closedTbl ecoCalTbl persistArea')
- rows = table.find_all('tr')[1:]
- projects = []
- for row in rows:
- cols = row.find_all('td')
- projects.append({
- 'time': [time.text for time in row.find_all('td')[:-7]],
- 'valute': [valute.text.strip() for valute in row.find_all('td')[1:-6]],
- 'volatile': [volatile['title'] for volatile in row.find_all(title=True)[2:-3]],
- 'title': [title.text.strip() for title in row.find_all('td')[3:-4]]
- })
- return projects
- def save(projects, path):
- with open(path, 'w') as csvfile:
- writer = csv.writer(csvfile)
- writer.writerow(('Time', 'Valute', 'Volatile', 'Title'))
- writer.writerows((project['time'], ', '.join(project['valute']), project['volatile'], project['title']) for project in projects)
- def main():
- projects = []
- parse(get_html(REQ))
- save(projects, 'projects.csv')
- if __name__ == '__main__':
- main()
Решение задачи: «Парсер не сохраняет результат в CSV»
textual
Листинг программы
- # -*- coding: utf-8 -*-
- import csv
- import urllib.request
- from bs4 import BeautifulSoup
- BASE_URL = 'https://ru.investing.com/economic-calendar/'
- REQ = urllib.request.Request(BASE_URL, headers={'User-Agent': "Magic Browser"})
- def get_html():
- response = urllib.request.urlopen(REQ)
- return response.read()
- def parse(html):
- soup = BeautifulSoup(html, "html.parser")
- table = soup.find('table', class_='genTbl closedTbl ecoCalTbl persistArea')
- rows = table.findAll('tr', id=lambda i: i and i.startswith('eventRowId_'))
- projects = []
- for row in rows:
- projects.append({
- 'Time': row.find('td', class_='first').text,
- 'Valute': row.find('td', class_='flagCur').text.strip(),
- 'Volatile': row.find('td', class_='sentiment').get('title') or row.find('td', class_='sentiment').text,
- 'Title': row.find('td', class_='event').text.strip()
- })
- return projects
- def save(projects, path):
- with open(path, 'w') as csvfile:
- writer = csv.DictWriter(csvfile, fieldnames=['Time', 'Valute', 'Volatile', 'Title'])
- writer.writeheader()
- writer.writerows(projects)
- def main():
- projects = parse(get_html())
- save(projects, 'projects.csv')
- if __name__ == '__main__':
- main()
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д