2016-06-17 3 views
1
from bs4 import BeautifulSoup 
from urllib import urlopen 

player_code = open("/Users/brandondennis/Desktop/money/CF_Name.txt").read() 
player_code = player_code.split("\r") 


for player in player_code: 

html =urlopen("https://www.capfriendly.com/players/"+player+"") 

soup = BeautifulSoup(html, 'html.parser') 

for section in soup.findAll('div',{"class": "table_c"}): 
    table = section.findChildren()[10].text 
    print player, table 

Вот ссылка на страницу образца игрока: https://www.capfriendly.com/players/patrik-eliasЗачистка таблицу с веб-страницы с Python

Вот пример имен игроков, которые я добавляю из текстового файла в базовом URL.

enter image description here

This is ultimately What I am wanting to do for my text file of 1000+ players

Это в конечном счете то, что я хочу сделать для моего текстового файла 1000+ игроков

+0

Можете ли вы привести пример вывода вы ожидаете? – Keatinge

+0

@keatinge Я хотел бы, в конечном итоге, иметь их в формате csv, как и таблица, отформатированная на веб-сайте. [Ссылка] (https://www.capfriendly.com/players/patrick-kane). У меня есть список из 1000 имен, которые я бы хотел получить. – denn9268

+0

Какую таблицу вы хотите? –

ответ

0

Трудно ответить, когда нет почти никакого контекста в вашем вопросе (Что именно не работает и что именно вы пытаетесь очистить), но посмотрите на эти строки:

first_columns.append(row.findAll('td'))[0] 
third_columns.append(row.findAll('td'))[2] 

Поскольку append возвращает None, эти строки вызовут исключение.

Я считаю, что они предназначены для:

first_columns.append(row.findAll('td')[0]) 
third_columns.append(row.findAll('td')[2]) 
+0

Я продолжаю видеть эту ошибку. (u'2018-19' , и '$ 2750000') Traceback (самый последний вызов последнего): Файл "/Users/bd/Desktop/untitled-14.py", строка 15, в таблице = soup.findAll ('table') [0] IndexError: list index out of range – denn9268

+0

@ denn9268 Обновите свой вопрос с помощью точного кода, который вы выполняете, и получения точной ошибки. Этот бит кода работает для меня: 'from urllib import urlopen; от bs4 import BeautifulSoup; url = 'https://www.capfriendly.com/players/patrik-elias'; soup = BeautifulSoup (urlopen (url)); table = soup.findAll ('table') [0] ' – DeepSpace

+0

, который работает для меня также с одним именем. Я получаю код ошибки, когда пытаюсь извлечь из нескольких имен. Я обновил код и примерный список имен. – denn9268

0

Вашей скобка и скобки выглядят неуместными.

Это делает то, что вы хотите?

first_columns = [] 
third_columns = [] 
for row in rows[1:]: 
    first_columns.append(row.findAll('td')[0]) 
    third_columns.append(row.findAll('td')[2]) 

Где я больше не вставить все элементы TD в каждом списке, а затем выберите [0] и [2] элементы, отбрасываются в любом случае.

1

Помимо других упоминаний. Посмотрите на этой линии:

table = soup.findAll('table_c')[2] 

здесь, BeautifulSoup бы попытаться найти table_c элементы. Но, table_c является атрибутом класса:

<div class="table_c"><div class="rel navc column_head3 cntrct"><div class="ofh"><div>HISTORICAL SALARY </div><div class="l cont_t mt4">SOURCE: The Hockey News, USA Today</div></div></div> 
    <table class="cntrct" id="contractinsert" cellpadding="0" border="0" cellspacing="0"> 
    ... 
    </table> 
</div> 

Используйте class_ аргумент вместо:

table = soup.find_all(class_='table_c')[2] 

Или, вы можете получить непосредственно к столу id:

table = soup.find("table", id="contractinsert") 
0

кажется чтобы работать отлично для одного игрока за раз, но когда я перехожу в свой текстовый файл списка игроков, где у меня возникают проблемы. Я думаю, как вы разбор файла является проблемой, если у вас есть игрок в каждой строке просто перебрать файлового объекта, зачистке любой пробел:

from bs4 import BeautifulSoup 
from urllib import urlopen 
import csv 

with open("/Users/bd/Desktop/testfolder/Player_Code_Test.txt") as f: 
    for player in map(str.strip, f)  

    html =urlopen("https://www.capfriendly.com/players/".format(player)) 
Смежные вопросы