【问题标题】:How to scrape multiple HTML tables with Beautiful Soup parser?如何使用 Beautiful Soup 解析器抓取多个 HTML 表格?
【发布时间】:2012-09-12 07:54:41
【问题描述】:

抱歉这个愚蠢的问题......刚开始使用python(但我喜欢它)。

问题: 我想从center for documentation of violism in syria 中抓取数据。目前我正在使用这个刮刀来收集数据。问题是我只能访问一行,而不是从表中刮掉所有行。 首选输出应如下所示

姓名 身份 性别 省份 地区 dateofdeath causeofdeath

import urllib2
from BeautifulSoup import BeautifulSoup
f = open('syriawar.tsv', 'w')
f.write("Row" + "\t" + "Data" + "\n")

for x in range (0,249):


syria = "file" + "\t" + str(x)
print "fetching data ... " + syria


url ='http://vdc-sy.org/index.php/en/martyrs/' + str(x) + '/c29ydGJ5PWEua2lsbGVkX2RhdGV8c29ydGRpcj1ERVNDfGFwcHJvdmVkPXZpc2libGV8c2hvdz0xfGV4dHJhZGlzcGxheT0wfA==' 

page = urllib2.urlopen(url)
soup = BeautifulSoup(page)

sentence = soup.findAll('tr')[3].text

words = sentence
Data = str(words)

f.write(str(x) + "\t" + Data + "\n" )

f.close()

【问题讨论】:

    标签: html-parsing beautifulsoup


    【解决方案1】:

    您需要另一层迭代。您应该首先调用 findAll('tr') 来获取所有行。然后删除作为标题和空的行,然后遍历剩余的行并在这些元素上调用 .text 以获取所需行的文本。从内部循环中将每一行写入文件。

    这是固定的脚本。请注意,必须使用 utf-8 编解码器,因为该页面在文本中包含 unicode。您应该验证这是否得到了您想要的一切。空标签导致 Beautiful Soup 出现一些问题。

    import urllib2
    from bs4 import BeautifulSoup
    import codecs
    
    f = codecs.open('syriawar.tsv', 'w', 'utf-8')
    f.write("Row" + "\t" + "Data" + "\n")
    
    for x in range (0,249):
    
      syria = "file" + "\t" + str(x)
      print "fetching data ... " + syria
    
      url ='http://vdc-sy.org/index.php/en/martyrs/' + str(x) + '/c29ydGJ5PWEua2lsbGVkX2RhdGV8c29ydGRpcj1ERVNDfGFwcHJvdmVkPXZpc2libGV8c2hvdz0xfGV4dHJhZGlzcGxheT0wfA=='
    
      page = urllib2.urlopen(url)
      soup = BeautifulSoup(page)
    
      rows = soup.findAll('tr')
    
      i = 0;
      for row in rows[3:]:
         if i%2 == 0:
            f.write(str(i/2) + "\t" + row.text + "\n" )
         i += 1
    
    f.close()
    

    另一种巧妙的方法是使用Scrapemark。它适用于表格和列表。

    【讨论】:

    • 您的方法似乎更有意义。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2015-11-08
    • 2022-01-03
    • 2017-03-30
    • 2014-12-16
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多