Python XML 字符串重组
Python XML string reassembly
我有以下用于从网上提取乐透号码的代码:
from BeautifulSoup import BeautifulSoup
from selenium import webdriver
lottonumbers=[]
url="https://www.lotto.de/de/ergebnisse/lotto-6aus49/archiv.html"
driver = webdriver.Firefox()
driver.get(url)
soup = BeautifulSoup(driver.page_source)
for ul in soup.findAll("div", {"class": "winning_numbers boxRow clearfix"}):
n = ','.join(''.join(_ for _ in li if _.isdigit()) for li in ul.text.split())
if n:
print format(n)
Returns:625262728475
应该是:6,25,26,27,28,47,5
缺少逗号。最好每个数字都写入列表lottonumbers
。
有人可以帮忙吗?
您可能会分配一个空列表 lottonumbers
并将 n 附加到另一个 for/loop
下,如下所示:
# ... previous code ...
lottonumbers = []
for ul in soup.findAll("div", {"class": "winning_numbers boxRow clearfix"}):
for li in ul.text.split():
n = ''.join(_ for _ in li if _.isdigit())
if n:
lottonumbers.append(int(n))
print lottonumbers
[6, 25, 26, 27, 28, 47, 5]
与此同时,我使用 hack(正则表达式)对其进行了处理。
from BeautifulSoup import BeautifulSoup
from selenium import webdriver
import re
url="https://www.lotto.de/de/ergebnisse/lotto-6aus49/archiv.html"
driver = webdriver.PhantomJS(executable_path="C://Users//Royskatt//Downloads//phantomjs-2.0.0-windows//bin//phantomjs.exe")
#driver = webdriver.Firefox()
driver.get(url)
soup = BeautifulSoup(driver.page_source)
lottonumbers = []
for ul in soup.findAll("div", {"class": "winning_numbers boxRow clearfix"}):
for i in re.findall(r'(?<=zahl\([1-6]\)">)\d{1,2}|(?<="last">)\d', str(ul)):
lottonumbers.append(i)
print lottonumbers
我发现,使用不同的网络驱动程序会导致动态生成的 HTML 出现细微差异。例如,当使用 PhantomJS 时,我得到以下结果:
['6', '25', '26', '27', '28', '47', '5']
,
而 webdriver.Firefox 给我
['6', '25', '26', '27', '28', '47']
可能我们在使用相同代码时遇到的不同输出是由不同版本的网络驱动程序引起的。例如,在我的案例中,相关的乐透号码写在很长的一行中,没有换行符。
我有以下用于从网上提取乐透号码的代码:
from BeautifulSoup import BeautifulSoup
from selenium import webdriver
lottonumbers=[]
url="https://www.lotto.de/de/ergebnisse/lotto-6aus49/archiv.html"
driver = webdriver.Firefox()
driver.get(url)
soup = BeautifulSoup(driver.page_source)
for ul in soup.findAll("div", {"class": "winning_numbers boxRow clearfix"}):
n = ','.join(''.join(_ for _ in li if _.isdigit()) for li in ul.text.split())
if n:
print format(n)
Returns:625262728475
应该是:6,25,26,27,28,47,5
缺少逗号。最好每个数字都写入列表lottonumbers
。
有人可以帮忙吗?
您可能会分配一个空列表 lottonumbers
并将 n 附加到另一个 for/loop
下,如下所示:
# ... previous code ...
lottonumbers = []
for ul in soup.findAll("div", {"class": "winning_numbers boxRow clearfix"}):
for li in ul.text.split():
n = ''.join(_ for _ in li if _.isdigit())
if n:
lottonumbers.append(int(n))
print lottonumbers
[6, 25, 26, 27, 28, 47, 5]
与此同时,我使用 hack(正则表达式)对其进行了处理。
from BeautifulSoup import BeautifulSoup
from selenium import webdriver
import re
url="https://www.lotto.de/de/ergebnisse/lotto-6aus49/archiv.html"
driver = webdriver.PhantomJS(executable_path="C://Users//Royskatt//Downloads//phantomjs-2.0.0-windows//bin//phantomjs.exe")
#driver = webdriver.Firefox()
driver.get(url)
soup = BeautifulSoup(driver.page_source)
lottonumbers = []
for ul in soup.findAll("div", {"class": "winning_numbers boxRow clearfix"}):
for i in re.findall(r'(?<=zahl\([1-6]\)">)\d{1,2}|(?<="last">)\d', str(ul)):
lottonumbers.append(i)
print lottonumbers
我发现,使用不同的网络驱动程序会导致动态生成的 HTML 出现细微差异。例如,当使用 PhantomJS 时,我得到以下结果:
['6', '25', '26', '27', '28', '47', '5']
,
而 webdriver.Firefox 给我
['6', '25', '26', '27', '28', '47']
可能我们在使用相同代码时遇到的不同输出是由不同版本的网络驱动程序引起的。例如,在我的案例中,相关的乐透号码写在很长的一行中,没有换行符。