emmmm
这算是一个对人家博客的完善吧,主要是从这个博主的代码思路自己一点一点的完善着写,原文链接如下:
https://equationliu.github.io/2018-12-9-chargebar/
这个实战项目主要是从北汽爬取北京市的充电站位置信息,然后将这些位置信息利用百度api进行地址编码返回经纬度,然后再根据经纬度,使用pyecharts画出北京市充电站分布地图,接下来我将会进行详细的分析
爬取数据
正所谓发博不上码,说了也白说。
话不多说,先上代码。
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import re
import json
以上这些呢主要是代码中需要的各种包,其中selenium+webdriver是我们在本项目中使用的主力,其原理是使用模拟浏览器自动化模拟用户打开点击操作网页的过程,在这个项目中,由于我们的充电站信息需要进行加载,如果直接访问会导致得到的数据有问题,因此我们使用它的等待功能,等页面加载完成后在进行爬取。
def get_one_page(url):
try:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/51.0.2704.63 Safari/537.36'}
response = requests.get(url, headers=headers, timeout=30)
if response.status_code == 200:
return response.text
else:
print(response.status_code)
return None
except:
print('访问 http 发生错误... ')
return None
requests方法,这个不需要多说,爬虫的基础
def baidu(ak,delete_quanjiao):
url = 'http://api.map.baidu.com/geocoding/v3/?address={}&output=json&ak={}'.format(delete_quanjiao,ak)
res =requests.get(url)
json_data= json.loads(res.text)
print(delete_quanjiao)
jingwei=[]
if json_data['status'] == 0:
lat = json_data['result']['location']['lat']#纬度
lng = json_data['result']['location']['lng']#经度
jingwei.append(lng)
jingwei.append(lat)
else:
jingwei.append('error')
jingwei.append('error')
print(json_data['status'])
print("发生了错误")
with