我正在尝试使用this教程抓一张桌子。我相当确定我得到了正确的表格,但我的输出只是满载u'\n'
的列表。
线if len(cells) == 10:
应该让我只抓住实际内容,而不是标题;如果我更改号码,我的所有列表都会返回None
,但是号码10
会填充正确的条目数,但这些条目都是相同的。
我做错了什么?
谢谢!
# -*- coding: utf-8 -*-
"""
Created on Wed Jun 29 13:21:36 2016
@author: natasha
"""
import urllib2
ukr = "http://www.ukrstat.gov.ua/operativ/operativ2013/rp/zn_ed_reg/zn_ed_reg_e/zn_ed_reg_2014k_e.htm"
page = urllib2.urlopen(ukr)
from bs4 import BeautifulSoup
soup = BeautifulSoup(page)
#scraping just the first table
table = soup.find('table', id = "table2")
#creating lists for future variables
NAM=[]
TOT=[]
AGR=[]
IND=[]
CON=[]
TRA=[]
STO=[]
ACC=[]
INF=[]
FIN=[]
#looping over rows
for row in table.findAll("tr"):
cells = row.findAll("td")
if len(cells) == 10:
NAM.append(cells[0].find(text=True))
TOT.append(cells[1].find(text=True))
AGR.append(cells[2].find(text=True))
IND.append(cells[3].find(text=True))
CON.append(cells[4].find(text=True))
TRA.append(cells[5].find(text=True))
STO.append(cells[6].find(text=True))
ACC.append(cells[7].find(text=True))
INF.append(cells[8].find(text=True))
FIN.append(cells[9].find(text=True))
答案 0 :(得分:0)
我不确定为什么这是你得到的行为,但你确定不需要在每个单元格中调用find()
。您可以从text
属性中获取单元格的内容。如果你替换
NAM.append(cells[0].find(text=True))
与
NAM.append(cells[0].text)
这将是NAM
:
[u'\n\r\n\t\tUkraine', u'\n\r\n\t\tVinnytsia',
u'\nVolyn', u'\n\r\n\t\tDnipropetrovsk', u'\nDonetsk',
u'\n\r\n\t\tZhytomyr', u'\n\r\n\t\tTranscarpathean',
u'\n\r\n\t\tZaporizhia', ...]
(当然,有很多\r
,\n
,\t
蚀刻不需要。我们可以通过调用strip()
字符串方法删除它们:
NAM.append(cells[0].text.strip())
结果如下:
[u'Ukraine', u'Vinnytsia', u'Volyn', u'Dnipropetrovsk', u'Donetsk',
u'Zhytomyr', u'Transcarpathean', u'Zaporizhia', u'Ivano-Frankivsk',
u'Kyiv', u'Kirovohrad', u'Luhansk', u'Lviv', u'Mykolaiv', u'Odesa',
u'Poltava', u'Rivne', u'Sumy', u'Ternopil', u'Kharkiv', u'Kherson',
u'Khmelnytsk', u'Cherkasy', u'Chernivtsi', u'Chernihiv',
u'City of \r\n\t\tKyiv']