【问题标题】:Getting html table data other than text content (get "title" tag data)获取文本内容以外的html表格数据(获取“title”标签数据)
【发布时间】:2019-06-16 13:12:27
【问题描述】:

我试图抓取的 html 表格的表格行中的一个表格条目如下所示:

<td class="top100nation" title="PAK">
<img src="/images/flag/flags_pak.jpg" alt="PAK"></td>

它所属的网页如下:http://www.relianceiccrankings.com/datespecific/odi/?stattype=bowling&day=01&month=01&year=2014。表中它所属的整个列具有相似的表数据(即它是一列图像)。

我在 python 脚本中使用 lxml。 (如果出于某种原因,可以改用 BeautifulSoup。)对于表中的每一列,我可以使用“data = entry.text_content()”在给定行中提取我想要的数据。显然,这不适用于这一列图像。但无论如何我都不想要图像数据。我想从这个表数据中得到的是“PAK”位——也就是说,我想要国家的名字。我认为这非常简单,但不幸的是我是一个不了解他正在使用的库的傻瓜。

提前致谢

编辑:完整的脚本,根据要求

import requests
import lxml.html as lh
import csv

with open('firstPageCricinfo','w') as file:
        writer = csv.writer(file)

page = requests.get(url)

doc = lh.fromstring(page.content)

#rows of the table
tr_elements = doc.xpath('//tr')

data_array = [[] for _ in range(len(tr_elements))]

del tr_elements[0]

for t in tr_elements[0]:
    name=t.text_content()
    if name == "":
            continue
    print(name)
    data_array[0].append(name)

#printing out first row of table, to check correctness
print(data_array[0])

for j in range(1,len(tr_elements)):
    T=tr_elements[j]

    i=0

    for t in T.iterchildren():

        #column is not at issue 
        if i != 3:
            data=t.text_content()
        #image-based column
        else:
            #what do I do here???
            data = t.

        data_array[j].append(data)
        i+=1

#printing last row to check correctness
print(data_array[len(tr_elements)-1])


with open('list1','w') as file:
    writer = csv.writer(file)

    for i in range(0,len(tr_elements)):
        writer.writerow(data_array[i])`

【问题讨论】:

  • 您能否附上您目前使用的代码,以便我们了解从哪里开始?
  • 很确定其余代码无关紧要,但可以肯定,我会发布它

标签: html python-3.x web-scraping html-table


【解决方案1】:

除了lxml 库,您还需要使用requests 或其他一些库来获取网站内容。

目前还没有看到你的代码,我可以提供一个 BeautifulSoup 解决方案:

url = 'http://www.relianceiccrankings.com/datespecific/odi/?stattype=bowling&day=01&month=01&year=2014'

from bs4 import BeautifulSoup
import requests

soup = BeautifulSoup(requests.get(url).text, 'lxml')

r = soup.find_all('td', {'class': 'top100cbr'})

for td in r:
    print(td.text.split('v')[1].split(',')[0].strip())

输出大约 522 项:

South Africa
India
Sri Lanka

...

Canada
New Zealand
Australia
England

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多