【发布时间】:2016-05-24 21:55:54
【问题描述】:
下面的代码从以下页面抓取数据: "http://www.gbgb.org.uk/resultsMeeting.aspx?id=136005.
它会抓取所有相关字段并将它们打印到屏幕上。但是我想尝试将表格形式的数据打印到 csv 文件中,以导出到电子表格或数据库中。
在网站源 HTML 中,赛道、日期、日期时间(比赛时间)等级、距离和奖品来自 div 类“resultsBlockheader”,并在网页上形成比赛卡的顶部区域。
源 HTML 中的比赛正文来自 div 类“resultsBlock”,其中包括完成位置(Fin)灰狗、陷阱、SP、时间/秒和时间距离。
最终会是这个样子
track,date,datetime,grade,distance,prize,fin,greyhound,trap,SP,timeSec,time distance
这可能吗,或者我必须先将其以表格形式打印到屏幕上,然后才能将其导出为 csv。
from urllib import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.gbgb.org.uk/resultsMeeting.aspx?id=136005")
bsObj = BeautifulSoup(html, 'lxml')
nameList = bsObj. findAll("div", {"class": "track"})
for name in nameList:
List = 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())
【问题讨论】:
-
这只是在自己的行上打印一大堆东西。如果您想要表格或 csv 格式,则需要重新格式化整个代码
-
嗨 cricket_007。感谢您的回复。我怎样才能让屏幕上的东西并排打印(对所有这些来说仍然很新):)
-
print(1,2)将打印在同一行。print(1)然后print(2)将打印在新行上。就这么简单。您必须将每个值放在一个列表中才能将它们打印在一行上。目前,您专注于列而不是行。 -
嗨 cricket_007,再次感谢您的回复,我尝试了 nameList = bsObj。 findAll("div", {"class": "track,grade,distance"}) 但我什么也没做对吗?亲切的问候 Moonsgadow
-
只有当有一个类为
"track,grade,distance"的 div 时才正确。旁注:用漂亮的汤获得多个课程并不是那么简单(这个网站上有几个问题如何做到这一点)
标签: python html csv web-scraping beautifulsoup