我正在尝试从网页上的表中抓取数据,然后使用Python 3和Beautiful Soup 4将其保存到CSV文件中。我已经能够提取数据,但我无法删除数据周围的标签或找到将其保存为CSV文件的方法。我已经梳理了之前提出的问题并尝试应用这些方法,但我仍然没有解决这个问题。
这是我的剧本:
import csv
import pandas as pd
import requests
from bs4 import BeautifulSoup
url="enter url here"
r=requests.get(url)
soup=BeautifulSoup(r.content,"lxml")
table=soup.find("table", attrs={"class":"smsEvents"})
list_rows=[]
for row in table.find_all('tr'):
list_cells=[]
for cell in row.find_all('td'):
list_cells.append(cell)
list_rows.append(list_cells)
print(list_rows)
以下是print命令返回的示例:
&nbsp </td>, <td class="rel119 carrier">
&nbsp </td>], [<td class="rel46 carrier">
0.00
</td>, <td class="rel47 carrier">
0.00
</td>, <td class="rel48 carrier">
0.00
该表包含每月记录的大约25个变量(行)(列)。我相信&nbsp
条目对应于将变量分成不同类别的行。
理想情况下,我想删除这些标记,然后将输出保存为CSV文件。我是python和数据抓取的新手,所以非常感谢任何和所有的帮助。
谢谢!
答案 0 :(得分:2)
import csv
import pandas as pd
import requests
from bs4 import BeautifulSoup
url="https://ai.fmcsa.dot.gov/SMS/Carrier/1000196/History.aspx"
r=requests.get(url)
soup=BeautifulSoup(r.content,"lxml")
table=soup.find("table", attrs={"class":"smsEvents"})
with open('a.csv', 'w', newline='') as f:
writer = csv.writer(f)
for tr in table('tr'):
row = [t.get_text(strip=True) for t in tr(['td', 'th'])]
writer.writerow(row)
答案 1 :(得分:0)
我建议在这里使用lxml
而不是BeautifulSoup(直接使用。尝试这样的事情:
from lxml import html
res=requests.get(url)
node = html.fromstring(res.content)
cells = node.xpath('//table[@class="smsEvents"]/tr/td')
请注意,您可以使用完整的xpath,而不是遍历父表的每个子元素以获取单元格。