- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试从维基百科获取某所大学的 lat lng,我有一个基本 url= ' https://de.wikipedia.org/wiki/Liste_altsprachlicher_Gymnasien ' 与大学列表,我从 href 获取每所大学的 wiki 页面,以获取他们的 wiki 页面上的 lat lng。我收到此错误“NoneType”对象没有属性“文本””我无法纠正此错误,我在哪里做错了?
import time
import csv
from bs4 import BeautifulSoup
import re
import requests
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://de.wikipedia.org/wiki/Liste_altsprachlicher_Gymnasien')
html = driver.page_source
base_url = 'https://de.wikipedia.org'
url = 'https://de.wikipedia.org/wiki/Liste_altsprachlicher_Gymnasien'
res = requests.get(url)
soup = BeautifulSoup(res.text)
university = []
while True:
res = requests.get(url)
soup = BeautifulSoup(res.text)
links = soup.find_all('a', href=re.compile('.*\/wiki\/.*'))
for l in links:
full_link = base_url + l['href']
town = l['title']
res = requests.get(full_link)
soup = BeautifulSoup(res.text)
info = soup.find('span', attrs={"title":["Breitengrad","Längengrad"]})
latlong = info.text
university.append(dict(town_name=town, lat_long=latlong))
print(university)
编辑 1感谢@rll,我进行了编辑:
if info is not None:
latlong = info.text
university.append(dict(town_name=town, postal_code=latlong))
print(university)
现在代码可以工作,但我只看到纬度,但看不到经度
示例输出:{'postal_code': '49°\xa072\xa036,73\xa0N', 'town_name': 'Schönborn-Gymnasium Bruchsal'}, {'postal_code': '49°\xa072\xa030,73\xa0N', 'town_name': '圣。保卢斯海姆'}
无论如何,如何格式化此输出以获取经度,并格式化输出抱歉,我在正则表达式方面很差。
编辑2
我还用更新的代码来获取经度
info = soup.find('span', attrs={"title":"Breitengrad"})
info1 = soup.find('span',attrs={"title":"Längengrad"})
if info is not None:
latlong = info.text
longitude = info1.text
university.append(dict(town_name=town, postal_code=latlong,postal_code1=longitude))
print(university)
现在我的输出如下:
{'postal_code': '48°\xa045′\xa046,9″\xa0N',
'postal_code1': '8°\xa014′\xa044,8″\xa0O',
'town_name': 'Gymnasium Hohenbaden'},
所以我需要帮助格式化纬度和经度,因为我无法弄清楚如何转换,例如:48°\xa045′\xa046,9″\xa0N 到 48° 45′ 9″ N
谢谢
最佳答案
抱歉没有直接回答,但我总是更喜欢使用 MediaWiki 的 API。我们很幸运拥有mwclient
在 Python 中,这使得使用 API 变得更加容易。
因此,就其值(value)而言,我将如何使用 mwclient
来做到这一点:
import re
import mwclient
site = mwclient.Site('de.wikipedia.org')
start_page = site.Pages['Liste_altsprachlicher_Gymnasien']
results = {}
for link in start_page.links():
page = site.Pages[link['title']]
text = page.text()
try:
pattern = re.compile(r'Breitengrad.+?([0-9]+/[0-9]+/[\.0-9]+)/N')
breiten = [float(b) for b in pattern.search(text).group(1).split('/')]
pattern = re.compile(r'Längengrad.+?([0-9]+/[0-9]+/[\.0-9]+)/E')
langen = [float(b) for b in pattern.search(text).group(1).split('/')]
except:
continue
results[link['title']] = breiten, langen
这为成功找到坐标的每个链接提供了一个列表元组[deg, min, sec]
:
>>> results
{'Akademisches Gymnasium (Wien)': ([48.0, 12.0, 5.0], [16.0, 22.0, 34.0]),
'Akademisches Gymnasium Salzburg': ([47.0, 47.0, 39.9], [13.0, 2.0, 2.9]),
'Albertus-Magnus-Gymnasium (Friesoythe)': ([53.0, 1.0, 19.13], [7.0, 51.0, 46.44]),
'Albertus-Magnus-Gymnasium Regensburg': ([49.0, 1.0, 23.95], [12.0, 4.0, 32.88]),
'Albertus-Magnus-Gymnasium Viersen-Dülken': ([51.0, 14.0, 46.29], [6.0, 19.0, 42.1]),
...
}
您可以按照自己喜欢的方式设置格式:
for uni, location in results.items():
lat, lon = location
string = """University {} is at {}˚{}'{}"N, {}˚{}'{}"E"""
print(string.format(uni, *lat+lon))
或者将 DMS 坐标转换为十进制:
def dms_to_dec(coord):
d, m, s = coord
return d + m/60 + s/(60*60)
decimal = {uni: (dms_to_dec(b), dms_to_dec(l)) for uni, (b, l) in results.items()}
请注意,并非所有链接页面都可能是大学;我没有仔细检查。
关于python - 网络数据(wiki) 抓取 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33807203/
我在父项目 A 的子项目 B 中有几个 wiki 页面。现在我想将它们从 B 的 wiki 移动到 A 的 wiki。如何在不复制和粘贴所有页面的情况下执行此操作? Redmine论坛的人建议直接编辑
如果两个用户编辑同一个 wiki 主题,wiki(或类似的协作编辑软件)中使用了什么方法将第二个用户的编辑与第一个用户的编辑合并? 我想要一个解决方案: 不需要锁定 不会丢失对页面的任何添加。 它可能
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 8年前关闭。 Improve this questi
我们正在向许多地方的许多用户(8 个国家/地区的 200 多个用户)部署新的软件系统。过去,我们为用户编写了手册,然后经常更新。这很好用,因为所有用户都有相同的手册,它涵盖了主要内容,但也有问题,比如
这张 table 是什么样子的——只有一张吗?你如何恢复到旧版本?类似于堆栈溢出的工作方式。 最佳答案 解决此问题的最佳方法是查看其他软件,例如 MediaWiki,并了解它们如何构建数据库。然后,您
我正在尝试使用 Redmine wiki,但我很难弄清楚如何使文本看起来不那么大。这是我正在做的标记示例。关于如何使文本看起来不那么大的任何建议。 h1. Best Practices
在Redmine Wiki中,有什么方法可以在标题中使用项目符号点编号,例如 # h1. Heading 1 ## h2. Sub Heading 1 # h1. Heading 2 输出如下
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 4年前关闭。 Improve t
目前我们团队正在使用MoinMoin作为 IT wiki,它非常好。 我们希望促进最终用户使用 wiki,因为他们中的一些人对此感兴趣。例如,我们将在 wiki 上共享和编辑应用程序的要求。 我认为
我的公司将使用Confluence在我们的IT系统上存储和共享我们的知识库,并且可以用于涵盖从硬件管理到程序员所面临的问题的主题。 我对建立全局空间的最佳做法感到好奇。为整个IT部门拥有一个大型的,万
对于我正在开发的应用程序 (*),我需要混合使用动态生成的页面和静态页面。使用 wiki 会很酷,一旦动态页面被第一次访问,它就会变成静态页面,用户可以像任何其他静态 wiki 页面一样对其进行注释。
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
您在公司中使用 wiki 吗?谁使用它以及为什么使用它。您是否在项目/团队/部门之间共享信息? 最佳答案 我们用我们的来存储 编码风格文档 网络服务器和网站的设置和部署程序 网络图(Dev、Stagi
我在 Trac wiki 中创建了一些文档。我将这些页面设置为都以相同的模式开始(例如“MyDoc ...”)。我想从 Trac 中检索以该模式开头的页面的所有 wiki 页面链接。 有办法吗? 最佳
我和我的 friend 正在考虑创建我们自己的 wiki。鉴于它们最近变得如此普遍,我们听说这并不难。我们希望网站尽可能简单——我们在网页设计方面有一些经验,但在系统管理方面没有很多经验。 futur
我的服务器上运行着一个 Gitlab CE 11.7 docker。当我从 gitlab.com 导入一个项目时,它的 wiki 丢失了。我使用内置界面导入项目: 新建项目 > 导入项目 [tab]
我在我的 Wiki 中构建了一个非常广泛的表格,在列结构方面具有以下格式。是否可以在 Wiki 中插入一个计数器来跟踪此表中的列数? |- | 1||[Site Link]||Country 1|
我的 Confluence wiki 中有一个页面,它是通过脚本自动生成的,并通过其 API 被推送到 Confluence 中。因此我不需要这个页面的历史,因为页面版本的数量会很快增加。 有没有办法
是否可以在类似于 cloak macro 的 trac wiki 中显示和隐藏内容块?汇合的? 最佳答案 它已经几个月大了,但我想知道同样的事情。 Remy Blank 的回答让我走上了正轨,他只是错
我想将 100 多个 RTF 文件转换为 Wiki 标记,但我只能在网络上甚至在 StackOverflow 上找到“Wiki to RTF”转换器。 我只需要 RTF --> Wiki 标记 外面有
我是一名优秀的程序员,十分优秀!