对于此项目,我正在从数据库中获取数据,并尝试将这些数据导出到电子表格以供进一步分析。(之前在这里发布过--感谢那边重新编写我的代码的帮助!)
我之前认为在表格中找到获胜者可以简化为始终选择在表格中出现的第一个名字,因为我认为“获胜者”始终出现在第一位。然而,情况并非如此。
无论候选人是否当选,都以图片的形式存储在第一列中。我该如何抓取并存储在电子表格中?
它位于<td headers>下:
我之前认为在表格中找到获胜者可以简化为始终选择在表格中出现的第一个名字,因为我认为“获胜者”始终出现在第一位。然而,情况并非如此。
无论候选人是否当选,都以图片的形式存储在第一列中。我该如何抓取并存储在电子表格中?
它位于<td headers>下:
<img src="/WPAPPS/WPR/Content/Images/selected_box.gif" alt="contestant won this nomination contest">
我的问题是:如何使用BeautifulSoup解析HTML表格并从第一列中提取一个值,该值以图像而非文本形式存储在表格中。
我想尝试一些布尔排序措施的想法,但我不确定如何实现。
我的代码如下:
from bs4 import BeautifulSoup
import requests
import re
import csv
url = "http://www.elections.ca/WPAPPS/WPR/EN/NC?province=-1&distyear=2013&district=-1&party=-1&pageno={}&totalpages=55&totalcount=1368&secondaryaction=prev25"
rows = []
for i in range(1, 56):
print(i)
r = requests.get(url.format(i))
data = r.text
cat = BeautifulSoup(data, "html.parser")
links = []
for link in cat.find_all('a', href=re.compile('selectedid=')):
links.append("http://www.elections.ca" + link.get('href'))
for link in links:
r = requests.get(link)
data = r.text
cat = BeautifulSoup(data, "html.parser")
lspans = cat.find_all('span')
cs = cat.find_all("table")[0].find_all("td", headers="name/1")
elected = []
for c in cs:
elected.append(c.contents[0].strip())
rows.append([
lspans[2].contents[0],
lspans[3].contents[0],
lspans[5].contents[0],
re.sub("[\n\r/]", "", cat.find("legend").contents[2]).strip(),
re.sub("[\n\r/]", "", cat.find_all('div', class_="group")[2].contents[2]).strip().encode('latin-1'),
len(elected),
cs[0].contents[0].strip().encode('latin-1')
])
with open('filename.csv', 'w', newline='') as f_output:
csv_output = csv.writer(f_output)
csv_output.writerows(rows)
真的,任何提示都将非常感激。非常感谢。
错误:搜索条件无效。请尝试选择新的搜索条件。
- Rafael Almeida