2016-02-05 4 views
1

Код ниже отображает все поля на экране. Есть ли способ получить поля «рядом» друг с другом, поскольку они появятся в базе данных или в электронной таблице. В исходном коде поля результатов, даты, даты и времени, класса, расстояния и призов находятся в классе divBieldHeader, а Fin (конечная позиция) Greyhound, Trap, SP timeSec и Time Distance находятся в Div resultsBlock. Я пытаюсь их отобразить как это трек, дата, дата, класс, расстояние, призы, плавник, борзая, ловушка, sp, timeSec, timeDistance все в одной строке. Любая помощь оценивается.Отображение содержимого веб-scrape

from urllib import urlopen 

from bs4 import BeautifulSoup 
html = urlopen("http://www.gbgb.org.uk/resultsMeeting.aspx?id=135754") 

bsObj = BeautifulSoup(html, 'lxml') 
nameList = bsObj. findAll("div", {"class": "track"}) 
for name in nameList: 
print(name. get_text()) 

nameList = bsObj. findAll("div", {"class": "date"}) 
for name in nameList: 
print(name. get_text()) 

nameList = bsObj. findAll("div", {"class": "datetime"}) 
for name in nameList: 
print(name. get_text()) 
nameList = bsObj. findAll("div", {"class": "grade"}) 
for name in nameList: 
print(name. get_text()) 
nameList = bsObj. findAll("div", {"class": "distance"}) 
for name in nameList: 
print(name. get_text()) 
nameList = bsObj. findAll("div", {"class": "prizes"}) 
for name in nameList: 
print(name. get_text()) 
nameList = bsObj. findAll("li", {"class": "first essential fin"}) 
for name in nameList: 
print(name. get_text()) 
nameList = bsObj. findAll("li", {"class": "essential greyhound"}) 
for name in nameList: 
print(name. get_text()) 
nameList = bsObj. findAll("li", {"class": "trap"}) 
for name in nameList: 
print(name. get_text()) 
nameList = bsObj. findAll("li", {"class": "sp"}) 
for name in nameList: 
print(name. get_text()) 
nameList = bsObj. findAll("li", {"class": "timeSec"}) 
for name in nameList: 
print(name. get_text()) 
nameList = bsObj. findAll("li", {"class": "timeDistance"}) 
for name in nameList: 
print(name. get_text()) 
nameList = bsObj. findAll("li", {"class": "essential trainer"}) 
for name in nameList: 
print(name. get_text()) 
nameList = bsObj. findAll("li", {"class": "first essential comment"}) 
for name in nameList: 
print(name. get_text()) 
nameList = bsObj. findAll("div", {"class": "resultsBlockFooter"}) 
for name in nameList: 
print(name. get_text()) 
nameList = bsObj. findAll("li", {"class": "first essential"}) 
for name in nameList: 
print(name. get_text()) 
+0

Сохраните содержимое в массивах, а затем распечатайте их позже – mplungjan

+0

PS: _ Вся информация, опубликованная на этом сайте («содержание»), предоставляется только для личного, некоммерческого использования. Вы можете сделать единую копию информации, опубликованной на этом веб-сайте, для личного, некоммерческого использования, в качестве резервной копии. Помимо этого, вы не можете копировать, изменять, повторно распространять, передавать, сдавать в аренду, сдавать в аренду или повторно лицензировать любой контент, содержащийся на этом сайте, и не получили никаких дополнительных прав или авторских прав. – mplungjan

+0

Привет, программа просто дает мне один длинный список, как я могу разбить список на массив, чтобы получить соответствующие элементы. Большое предложение. – moonshadow

ответ

0

Прежде всего, убедитесь, что вы не нарушаете веб-сайта Terms of Use - остаться на юридической стороне.

Разметку не очень легко очистить, но я бы сделал это, чтобы перебирать заголовки гонок и для каждого заголовка, получать желаемую информацию о гонке. Затем получите блок результатов брака и извлеките строки. Пример кода, чтобы вы начали - извлекает трек и борзую:

from pprint import pprint 
from urllib2 import urlopen 

from bs4 import BeautifulSoup 


html = urlopen("http://www.gbgb.org.uk/resultsMeeting.aspx?id=135754") 
soup = BeautifulSoup(html, 'lxml') 

rows = [] 
for header in soup.find_all("div", class_="resultsBlockHeader"): 
    track = header.find("div", class_="track").get_text(strip=True) 

    results = header.find_next_sibling("div", class_="resultsBlock").find_all("ul", class_="line1") 
    for result in results: 
     greyhound = result.find("li", class_="greyhound").get_text(strip=True) 

     rows.append({ 
      "track": track, 
      "greyhound": greyhound 
     }) 

pprint(rows) 

Заметьте, что каждая строка вы видите в таблицах фактически представлен 3 линиями разметки:

<ul class="contents line1"> 
    ... 
</ul> 
<ul class="contents line2"> 
    ... 
</ul> 
<ul class="contents line3"> 
    ... 
</ul> 

Значение greyhound был в первом ul (с классом line1), вам может потребоваться получить line2 и line3 с использованием result.find_next_sibling("ul", class="line2") и result.find_next_sibling("ul", class="line3").

+0

Hi alecxe, похоже, работает нормально. – moonshadow

Смежные вопросы