条件运算符是什么意思【Python笔记】read_html():获取⽹页表格数据读取JSON数据XML和
HTM。。。
⽂章⽬录
read_html():获取⽹页表格数据
当数据量不多时: 快速抓取法
当数据量较多时: 完整爬⾍抓取法
JSON数据
JSON(JavaScript Object Notation的简称)已经成为通过HTTP请求在Web浏览器和其他应⽤程序之间发送数据的标准格式之⼀。它是⼀种⽐表格型⽂本格式(如CSV)灵活得多的数据格式。
注意:全都要⽤英⽂输⼊模式下的双引号 “
obj="""
{"name":"Wes",
"places_lived":["USA","Spain","China"],
"pet":null,
"siblings":[{"name":"Scott","age":25,"pet":"Zuko"},
{"name":"Katie","age":33,"pet":"Cisco"}]
}
"""
除了空值null和⼀些其他的细微差别(如列表末尾不允许存在多余的逗号)之外,JSON⾮常接近于有效的Python代码。 基本类型有对象(字典)、数组(列表)、字符串、数值、布尔值以及null。对象中所有的键都必须是字符串。许多Python库都可以读写JSON数据。我将使⽤json,因为它是构建于Python标准库中的。通过json.loads即可将JSON字符串转换成Python形式:
import json
result=json.loads(obj)
result
# {'name': 'Wes',
# 'places_lived': ['USA', 'Spain', 'China'],
# 'pet': None,
# 'siblings': [{'name': 'Scott', 'age': 25, 'pet': 'Zuko'},
# {'name': 'Katie', 'age': 33, 'pet': 'Cisco'}]}
相反,json.dumps则将Python对象转换成JSON格式:
asjson=json.dumps(result)
asjson
# '{"name": "Wes",
# "places_lived": ["USA", "Spain", "China"],
# "pet": null,
# "siblings": [{"name": "Scott", "age": 25, "pet": "Zuko"},
# {"name": "Katie", "age": 33, "pet": "Cisco"}]}'
如何将(⼀个或⼀组)JSON对象转换为DataFrame或其他便于分析的数据结构就由你决定了。最简单的⽅式:向DataFrame构造器传⼊⼀组JSON对象,并选取数据字段的⼦集。
import pandas as pd
import json
result=json.loads(obj)
siblings=pd.DataFrame(result['siblings'],columns=['name','age'])
siblings
name age
0Scott25
1Katie33
XML和HTML:Web信息收集
编程好学吗去极客时间⾸先,到希望获取数据的URL,利⽤urllib2将其打开,然后⽤lxml解析得到的数据流:
from lxml.html import parse
from urllib import request
parsed=parse(request.urlopen('www.baidu'))
32进制转换对应表# &_ElementTree at 0xf74dd28>
t()# <Element html at 0xf7be960>
links=doc.findall('.//a')
links[15:20]
# [<Element a at 0xf7bed80>,
# <Element a at 0xf7bedb0>,
# <Element a at 0xf7bede0>,
# <Element a at 0xf7bee10>,
# <Element a at 0xf7bee40>]
lnk=links[28]# <Element html at 0xf7be960>
<('href')
<_content()# '\ue619换⼀换'
编写下⾯这条列表推导式(list comprehension)即可获取⽂档中的全部URL:
urls=[('href')for lnk in doc.findall('.//a')]
urls[-10:]
# ['v',
python请求并解析json数据
# 'www.baidu/s?rtt=1&bsst=1&cl=2&tn=news',
# 'v.baidu/v?ct=301989888&rn=20&pn=0&db=0&s=25&ie=utf-8',
# 'image.baidu/i?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8',
# 'zhidao.baidu/q?ct=17&pn=0&tn=ikaslist&rn=10&fr=wwwt',
# 'wenku.baidu/search?lm=0&od=0&ie=utf-8',
# 'tieba.baidu/f?fr=wwwt',
# 'map.baidu/?newmap=1&ie=utf-8&s=s',
# 'b2b.baidu/s?fr=wwwt',
# 'www.baidu/more/']
从⽂档中出正确表格的⽅法:反复试验。
# 只是⽰例,baidu的⽹站没有table
tables=doc.findall('.//table')
calls,puts=tables[9],tables[3]
# 表格的标题⾏th,数据⾏td
rows=calls.findall('.//tr')
def_unpack(row,kind='td'):
elts=row.findall('.//%s'%kind)
_content()for val in elts]
_unpack(rows[0],kind='th')#['strike','symbol','last']
_unpack(rows[1],kind='td')#['295.00','AAPL12082313','310.40']
现在整合所有步骤,将数据转化成⼀个DataFrame。由于数值型数据仍是字符串格式,我们希望将部分列(可能不是全部)转换为浮点数格式。 pandas恰好有⼀个TextParser类可以⽤于⾃动类型转换(read_csv和其他解析函数其实在内部都⽤到了它)。
霹雳布袋戏天地主宰from pandas.io.parsers import TextParser
def parse_options_data(table):
rows=table.findall('.//tr')
header=_unpack(rows[0],kind='th')带脉位置图
data=[_unpack(r)for r in rows[1:]]
return TextParser(data,names=header).get_chunk()
call_data=parse_options_data(calls)
put_data=parse_options_data(puts)
call_data[:8]
使⽤HTML和Web API
许多⽹站都有⼀些通过json或其他格式提供的数据公共API,⼀个简单易⽤的⽅法是⽤request包。
import request
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论