我正在尝试获取数据并导出到CSV文件,该文件具有我的主要URL页面和第二个URL主页,我已经导入了以下内容:
from bs4 import BeautifulSoup
import urllib.request
from urllib.parse import urlparse, parse_qs
import csv
def get_page(url):
request = urllib.request.Request(url)
response = urllib.request.urlopen(request)
mainpage = response.read().decode('utf-8')
return mainpage
mainpage = get_page(www.website1.com)
mainpage_parser = BeautifulSoup(mainpage,'html.parser')
secondpage = get_page('www.website2.com')
secondpage_parser = BeautifulSoup(secondpage,'html.parser')
数据的格式相同,例如标题,地址;因此,我的代码 在每个类中使用“ find”或“ find_all”;例如,
try:
name = page_parser.find("h1",{"class":"xxx"}).find("a").get_text()
print(name)
except:
print(name)
它起作用了。 但是,我无法从此html类的url链接中获取“ lat”和“ lon”:
<img class="aaa" alt="map" data-track-id="static-map" width="97" height="142" src="https://www.website.com/aaaaaaa;height=284&lat=18.111&lon=98.111&level=15&returnImage=true">
我要获取经度和纬度的代码是:
for gps in secondpage_parser.find_all('img',{"class":"aaa"}, src=True):
parsed_url = urlparse(gps['src'])
mykeys = ['lat', 'lon']
gpslocation = [parse_qs(parsed_url.query)[k][0] for k in mykeys]
print(gpslocation)
但是在“ gpslocation = [mykeys中的k的pars_qs(parsed_url.query)[k] [0] [k] [0]]行中显示关键错误,它指示“ KeyError:'lat'”
我想知道我在哪部分出错或应该如何解决。请帮忙。
答案 0 :(得分:1)
此url没有查询字符串,但是有参数(请参见what is the difference between URL parameters and query strings)。因此,当您尝试解析查询字符串时,会得到一个空字典。因此,KeyError
。
"https://www.website.com/aaaaaaa;height=284&lat=18.111&lon=98.111&level=15&returnImage=true"
# ^--- semicolon, not question mark
print(parsed_url)
的结果
ParseResult(
scheme='https',
netloc='www.website.com',
path='/aaaaaaa',
params='height=284&lat=18.111&lon=98.111&level=15&returnImage=true',
query='',
fragment='')
这里的关键是解析参数。要解决您的代码,请将parsed_url.query
更改为parsed_url.params
:
gpslocation = [parse_qs(parsed_url.params)[k][0] for k in mykeys]