Python:为特定内容刮取表格

时间:2017-05-02 16:03:27

标签: python screen-scraping

我试图在网站上抓一个特定表格的特定部分。

URL = https://h10145.www1.hpe.com/downloads/SoftwareReleases.aspx?ProductNumber=J9775A

在网站内,有一个我试图抓取的HTML表格,我可以做,但是,我得到了很多其他项目,我不需要。如果您查看URL,该表包含多个下拉列表,我只需要"当前版本"列表。

检查元素使我可以使用Screenshot

正如您所看到的,有许多表格行的类型为" Current_Releases",但我无法弄清楚如何拉取 - 那些。

我正在使用Python 3.2和BeautifulSoup,当然还有请求和csv

这是我的代码:

url = "https://h10145.www1.hpe.com/downloads/SoftwareReleases.aspx?ProductNumber=J9775A"
r = requests.get(url)
soup = BeautifulSoup(r.content)
table = soup.find('table', attrs={"class": "hpui-standardHrGrid-table"})
headers = [header.text for header in table.find_all('th')]
rows = []

for row in table.find_all('tr'):
  rows.append([val.text.encode('utf8') for val in row.find_all('td')])
with open('c:\source\output_file.csv', 'w') as f:
  writer = csv.writer(f)
  writer.writerow(headers)
  writer.writerows(row for row in rows if row)

提前感谢任何建议和帮助,因为我是python的新手

1 个答案:

答案 0 :(得分:1)

table.find_all('tr')替换为table.find_all('tr', {'releasetype': 'Current_Releases')<tr>的{​​{1}}属性为releasetype

结帐docs了解详情。

更新:添加完整代码

Current_Releases

给我一​​个带输出的CSV文件

import csv
import requests
from bs4 import BeautifulSoup

url = "https://h10145.www1.hpe.com/downloads/SoftwareReleases.aspx?ProductNumber=J9775A"
r = requests.get(url)
soup = BeautifulSoup(r.content, 'lxml')
table = soup.find('table', attrs={"class": "hpui-standardHrGrid-table"})
headers = [header.text for header in table.find_all('th')]
rows = []

for row in table.find_all('tr', {'releasetype': 'Current_Releases'}):
    item = []
    for val in row.find_all('td'):
        item.append(val.text.encode('utf8').strip())
    rows.append(item)

with open('output_file.csv', 'w') as f:
  writer = csv.writer(f)
  writer.writerow(headers)
  writer.writerows(rows)