python3实践-从网站获取数据(Carbon Market Data-BJ) (pandas,bs4)
自己边看边实践一些简单的实际应用,下面的程序是从某个网站上获取需要的数据。
在编写的过程中,通过学习陆续了解到一些方法,发现Python真的是很便捷。
尤其是用pandas获取网页中的表格数据,真的是太方便了!!!
程序写的可能并不好,但基本上实现了自己的需求。
希望有高手来指点下~~
Version 04 (Jan 12 2017)【对于获取表格信息,推荐使用该方法】
# Code based on Python 3.x
# _*_ coding: utf-8 _*_
# __Author: "LEMON" import pandas as pd url2 = 'http://www.bjets.com.cn/article/jyxx/?'
links = []
for n in range(2, 40):
# 页面总数为39页,需要自己先从网页判断,也可以从页面抓取,后续可以完善
link = url2 + str(n)
links.append(link)
links.insert(0, url2) df2 = pd.DataFrame() # creates a new dataframe that's empty
for url in links:
# 利用pandas获取数据,需要安装 html5lib模块
dfs = pd.read_html(url, header=0)
for df in dfs:
df2= df2.append(df, ignore_index= True) # df2.to_excel('MktDataBJ.xlsx') # 将数据存储在excel文件里
df2.to_csv('MktDataBJ-1.csv') # 将数据存储在csv文件里
Version 03 (Jan 12 2017)
# Code based on Python 3.x
# _*_ coding: utf-8 _*_
# __Author: "LEMON" from bs4 import BeautifulSoup
import requests
import csv url2 = 'http://www.bjets.com.cn/article/jyxx/?'
links = []
for n in range(2, 40):
# 页面总数为39页,需要自己先从网页判断,也可以从页面抓取,后续可以完善
link = url2 + str(n)
links.append(link)
links.insert(0, url2) for url in links:
rep = requests.get(url)
# content = rep.text.encode(rep.encoding).decode('utf-8')
# # 直接用requests时,中文内容需要转码 soup = BeautifulSoup(rep.content, 'html.parser') # table = soup.table
table = soup.find('table') # 两种方式都可以 trs = table.find_all('tr')
trs2 = trs[1:len(trs)]
list1 = []
for tr in trs2:
td = tr.find_all('td')
row = [i.text for i in td]
list1.append(row) with open('MktDataBJ.csv', 'a', errors='ignore', newline='') as f:
f_csv = csv.writer(f)
f_csv.writerows(list1)
Version 02 (Jan 09 2017)
# Code based on Python 3.x
# _*_ coding: utf-8 _*_
# __Author: "LEMON" from bs4 import BeautifulSoup
import requests
import csv url2 = 'http://www.bjets.com.cn/article/jyxx/?'
links = []
for n in range(2, 40):
# 页面总数为39页,需要自己先从网页判断,也可以从页面抓取,后续可以完善
link = url2 + str(n)
links.append(link)
links.insert(0, url2)
# print(links) for url in links:
rep = requests.get(url)
# content = rep.text.encode(rep.encoding).decode('utf-8')
# # 直接用requests时,中文内容需要转码 soup = BeautifulSoup(rep.content, 'html.parser')
body = soup.body
data = body.find('div', {'class': 'list_right'}) quotes = data.find_all('tr')
quotes1 = quotes[1:len(quotes)] list1 = []
for x in quotes1:
list2 = []
for y in x.find_all('td'):
list2.append(y.text) # 每日的数据做一个单独的list
list1.append(list2)
# print(list1) # list1为每日数据的总列表
with open('MktDataBJ.csv', 'a', errors='ignore', newline='') as f:
f_csv = csv.writer(f)
f_csv.writerows(list1)
Version 01 (Jan 08 2017)
# Code based on Python 3.x
# _*_ coding: utf-8 _*_
# __Author: "LEMON" from bs4 import BeautifulSoup
import requests
import csv urllink = 'http://www.bjets.com.cn/article/jyxx/?'
links = []
for n in range(2, 40):
#页面总数为39页,需要自己先从网页判断,也可以从页面抓取,后续可以完善
link = urllink + str(n)
links.append(link)
links.insert(0, urllink)
# print(links) for url in links: rep = requests.get(url)
# content = rep.text.encode(rep.encoding).decode('utf-8')
# # 直接用requests时,中文内容需要转码 soup = BeautifulSoup(rep.content, 'html.parser') # print(soup.prettify())
# # prettify() body = soup.body
data = body.find('div', {'class': 'list_right'}) # table title
titles = data.find_all('th') title = []
for x in titles:
title.append(x.text)
# print(title) quotes = data.find_all('tr')
quotes1 = quotes[1:len(quotes)]
# print(quotes1) list1 = []
for x in quotes1:
for y in x.find_all('td'):
list1.append(y.text)
# print(list1) # list为每日数据的总列表 date = []
volumes = []
meanprice = []
totalmoney = [] for i in range(0, len(list1)):
if i % 4 == 0:
date.append(list1[i])
elif i % 4 == 1:
volumes.append(list1[i])
elif i % 4 == 2:
meanprice.append(list1[i])
else:
totalmoney.append(list1[i]) # print(date)
# print(volumes)
# print(meanprice)
# print(totalmoney) final = []
for i in range(0, len(date)):
temp = [date[i], volumes[i], meanprice[i], totalmoney[i]]
final.append(temp)
# print(final)
with open('bj_carbon.csv', 'a', errors='ignore', newline='') as f:
f_csv = csv.writer(f)
f_csv.writerows(final)
python3实践-从网站获取数据(Carbon Market Data-BJ) (pandas,bs4)的更多相关文章
- python3实践-从网站获取数据(Carbon Market Data-GD) (bs4/Beautifulsoup)
结合个人需求,从某个网站获取一些数据,发现网页链接是隐藏的,需要通过浏览器看后面的代码来获取真实的链接. 下面这个案例,直接是从真实的链接中爬去数据. 此外,发现用pandas的read_html不能 ...
- Python Socket请求网站获取数据
Python Socket请求网站获取数据 ---阻塞 I/O ->收快递,快递如果不到,就干不了其他的活 ---非阻塞I/0 ->收快递,不断的去问,有没有送到,有没有送到,. ...
- ASP.NET Web API实践系列07,获取数据, 使用Ninject实现依赖倒置,使用Knockout实现页面元素和视图模型的双向绑定
本篇接着上一篇"ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API",尝试获取数据. 在Models文件夹下创 ...
- CTreeItem保存和获取数据
保存数据: std::string val = "test data"; CString* pNodeData = new CString; *pNodeData = val.c_ ...
- 《大型网站系统与JAVA中间件实践》读书笔记-数据访问层
数据访问层 5.1.2数据库垂直/水平拆分的困难 随着网站业务的快速发展,数据量和访问量不断上升,数据库的压力越来越大. 更换更好的硬件(Scale Up)是一种解决方案,而且在我们能付得起硬件费用并 ...
- Python3爬取王者官方网站英雄数据
爬取王者官方网站英雄数据 众所周知,王者荣耀已经成为众多人们喜爱的一款休闲娱乐手游,今天就利用python3 爬虫技术爬取官方网站上的几十个英雄的资料,包括官方给出的人物定位,英雄名称,技能名称,CD ...
- Python3.x:定时获取页面数据存入数据库
Python3.x:定时获取页面数据存入数据库 #间隔五分钟采集一次数据入库 import pymysql import urllib.request from bs4 import Beautifu ...
- HttpWebRequest 模拟网站登录获取数据
此文档仅仅是一个BaseCode,已做后续查阅 项目使用IBM Platform Symphony分布式平台,所有业务处理都在这个分布式平台上计算,需求是获取这些计算机机群的运行状态,和每一个服务的的 ...
- winpcap编程设置过滤器之指定获取某个网站的数据
下面,我将以 乱世隋唐页游 为例,通过编码获取这里面的数据. 游戏图: 我是乱世隋唐的网址是:www.917st.com 这个是官网网址的服务器地址. 42.62.0.14 我玩的游戏服是84区.网 ...
随机推荐
- iOS 时间转换
#pragma mark - 获取当前时间戳 -(NSString *)getTimeSp{ NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:]; ...
- C语言数据库-二叉树
一.定义 二叉树在图论中是这样定义的:二叉树是一个连通的无环图,并且每一个顶点的度不大于3.有根二叉树还要满足根结点的度不大于2.有了根结点之后,每个顶点定义了唯一的父结点,和最多2个子结点.然而,没 ...
- Sass 条件-循环语句
学习Sass中 @if...@else @for @while @each 一.条件判断 - @if @else 示例: @mixin blockOrHidden($boolean:true){ @i ...
- 简单的异步HTTP服务端和客户端
/// <summary> /// 异步Http服务器 /// </summary> class AsyncHttpServer { readonly HttpListener ...
- GitLab 迁移与升级
参考: [ 博客园 BigBao ] 环境说明: OS: CentOS 7.x gitlab-ce 初始版本: 8.8.5 gitlab-ce 升级到版本: 11.2.3 升级方式: rpm 安装升级 ...
- 使用abp的 redis cache
top 使用abp的 redis cache -1. 在微软维护的github项目的release里找到redis的windows版本 64位 大约5M,安装,安装,然后在安装目录找到redis.wi ...
- eCharts_基于eCharts开发的一个多图表页面
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- spring cloud ribbon 断路器
@EnableDiscoveryClient @SpringBootApplication @EnableCircuitBreaker //开启断路器 public class ConsumerMov ...
- device tree --- #interrupt-cells property
device tree source Example1 interrupt-controller@e000e100 { ... ... #interrupt-cells = <0x1>; ...
- sicily 1016. 排队接水--课程作业
1016. 排队接水 Time Limi ...