Уведомления

Группа в Telegram: @pythonsu

#1 Май 20, 2018 20:25:10

GunS86
Зарегистрирован: 2018-05-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка в парсере.

Всем доброго дня. Подскажите что не так, почему ошибку выдает.
Сайт https://1xstavka.ru/live/Football/
>>> pages = soup.find('ul', class_='liga_menu').find_all('a', class_=' link').get('href')
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
File “C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\beautifulsoup4-4.6.0-py3.6.egg\bs4\element.py”, line 1807, in __getattr__
AttributeError: ResultSet object has no attribute ‘get’. You're probably treating a list of items like a single item. Did you call find_all() when you meant to call find()?

Если в конце убрать .get('href') то он находит тег ‘a’. А мне нужно вытащить ссылки с этого тега. Но выдает ошибку.

Офлайн

#2 Май 20, 2018 22:49:39

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Ошибка в парсере.

find_all возвращает список, а к списку get() не применяется

Офлайн

#3 Май 21, 2018 18:56:13

GunS86
Зарегистрирован: 2018-05-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка в парсере.

Romissevd
find_all возвращает список, а к списку get() не применяется
Спасибо)
Но теперь новая ошибка) почему так пишет.
Traceback (most recent call last):
File “C:\Users\Guns\Desktop\Project\soccer.py”, line 67, in <module>
main()
File “C:\Users\Guns\Desktop\Project\soccer.py”, line 61, in main
write_csv(data)
File “C:\Users\Guns\Desktop\Project\soccer.py”, line 46, in write_csv
writer.writerow( (data,
KeyError: ‘name’

Офлайн

#4 Май 21, 2018 22:23:04

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Ошибка в парсере.

GunS86
почему так пишет.
Одному Ему известно)) Код выкладывай, иначе тебе ничем никто не поможет. Летая в догадках, что-то с твоим именем при записи в файл не так.

Офлайн

#5 Май 23, 2018 19:14:45

GunS86
Зарегистрирован: 2018-05-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка в парсере.

 [quote=Romissevd][/quote]
import requests
from bs4 import BeautifulSoup
import csv
from datetime import datetime
def get_html(url):
	r = requests.get(url)
	return r.text # Возращает HTML - код страницы
def get_total_pages(html):
	soup = BeautifulSoup(html, 'lxml')
	pages = soup.find('ul', class_='liga_menu').find_all('li')
	links = []
	for li in pages:
		a = li.find('a').get('href') #берем ссылки матчей, это строка(string)
		link = 'https://1xstavka.ru/' + a
		links.append(link) #записывает в конец списка
	return links	
def get_page_data(html):
	soup = BeautifulSoup(html, 'lxml')
	try:
		name = soup.find('span', class_='c-events__team').text.strip()
	except:
		name = ''
	try:
		schet = soup.find('div', class_='c-events__score').text.strip()
	except:
		schet = ''
	data = {'Матч': name,
			'Счет': schet}
	return data
	
def write_csv(data):
	with open('1xstavka.csv', 'a') as parser:   #Парсер название файла куда все сохраниться
		writer = csv.writer(parser)
		writer.writerow( (data['name'],
			              data['schet']) )
		print(data['name'], 'parsed')
def main():
	
	url = 'https://1xstavka.ru/live/Football/'
	all_links = get_total_pages( get_html(url) )
	for index, url in enumerate(all_links):  #index придуманная переменная
		html = get_html(url)
		data = get_page_data(html)
		write_csv(data)
		print(index)
if __name__ == '__main__':
	main()

Офлайн

#6 Май 23, 2018 20:16:16

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Ошибка в парсере.

 writer.writerow( (data['Матч'], data['Счет']) )
print(data['Матч'], 'parsed')

Отредактировано Romissevd (Май 23, 2018 20:16:42)

Офлайн

#7 Май 23, 2018 20:26:28

GunS86
Зарегистрирован: 2018-05-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка в парсере.

Romissevd
 Traceback (most recent call last):
  File "soccer.py", line 67, in <module>
    main()
  File "soccer.py", line 61, in main
    write_csv(data)
  File "soccer.py", line 46, in write_csv
    writer.writerow( (data['name'],
KeyError: 'name'
Вот такое теперь выдает

Офлайн

#8 Май 23, 2018 20:31:53

GunS86
Зарегистрирован: 2018-05-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка в парсере.

Блин все, забыл сохранить)) все нормально)) Спасибо!!)))

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version