我试图在网站上抓一个特定表格的特定部分。
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的新手
答案 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)