刮一个简单的html表会返回u' \ n(带有BeautifulSoup的Python)

时间:2016-06-29 20:05:11

标签: python web-scraping beautifulsoup

我正在尝试使用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))

1 个答案:

答案 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']