我正在尝试从网站(https://www.bexar.org/DocumentCenter/View/22152/June-8-2019-Election-Totals-Report)上刮取最终投票数据,以用于制作地图。通过复制所需的数据(CITY OF SAN ANTONIO市长),我可以缩小很多范围,但区(1001、1002等)与第一票总数之间的空间量取决于数量的投票数(第1列中35位数表示2位数的投票数,3位数表示34空格,依此类推)。
我遇到的问题是,我已经两年没有使用python了,我只是想在Excel中获取专区并投票给总数,以便从中获取一些额外的数据,而无需手动输入。我试图仅使用网站上的数据制作CSV文件,然后将其导入Excel。
我试图记住一些我学过的python,并且能够用逗号替换 any 出现的空格,但这不适用于CSV文件,因为据我所知。
这是我到目前为止所做的。
import re
filename = open("E:\Downloads\data.txt")
contents = filename.read()
print(re.sub("[ ,.]", ",", contents))
这给了我
1001,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,172,,,,26,,,,,0,,,,,1
1002,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,27,,,,50,,,,,0,,,,,0
依此类推,而不是
1001,172,26,0,1
1002,27,50,0,0
这是我想要的结果。
非常感谢您的帮助:)
答案 0 :(得分:0)
您尝试过
numspaces=4
contents=contents.replace(" "*numspaces,",")
答案 1 :(得分:0)
您可以尝试
re.sub("[ ]{2,}",",", string)
它将用逗号替换两个或多个空格。
答案 2 :(得分:0)
您可以使用\ W匹配任何非单词字符:
contents = re.sub(r'\W+', ',', contents)
更准确
contents = re.sub(r'(\W)\1+', r'\1', contents)
答案 3 :(得分:0)
这将更改您的代理标头,因此您不会显示为机器人。您将在Java页面上遇到一个解析阻止器。要抓取Java页面,您将需要使用Selenium之类的东西。 https://stanford.edu/~mgorkove/cgi-bin/rpython_tutorials/Scraping_a_Webpage_Rendered_by_Javascript_Using_Python.php
import urllib.request
import urllib.parse
import re
try:
url = input('Enter full website address (http://, https://:> ')
headers = {}
headers['User-Agent'] = 'Mozilla/5.0 (x11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.27 Safari/537.17'
req = urllib.request.Request(url, headers=headers)
resp = urllib.request.urlopen(req)
respdata = resp.read()
except Exception as e:
print('That is not a valid website address\nCheck the web address'
, (e))
content = re.findall(r'<p>(.*?)</p>', str(respdata))
for contents in content:
print(contents)
答案 4 :(得分:0)
def func(string):
lst =string.split(",")
result =",".join([i for i in lst if i!=""])
return result
a ='1001,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,172,,,,26,,,,,0,,,,,1'
b='1002,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,27,,,,50,,,,,0,,,,,0'
print(func(a))
#1001,172,26,0,1