day16-简单网页数据爬取
1、练习
"""
将100以内的素数输出到一个文件中
"""
def is_prime(num:int)->bool:
"""
判断一个正整数是不是素数
:param num: 正整数
:return: 素数返回True,否则返回False
"""
for i in range(2,int(num**0.5)+1):
if num % i == 0:
return False
return True
with open('prime.txt','w') as file:
for n in range(2, 100):
if is_prime(n):
file.write(f'{n}\n')
2、对象的序列化和反序列化
"""
对象的序列化(serialization)和反序列化(deserialization)
序列化:把一个对象(字典,列表等)变成字符串(str)或者字节串(bytes二进制)
反序列化:从字节串或者字符串中还原出一个对象(字典,列表等)
python的标准库有一个名为json/pickle的模块,可以支持我们做序列化和反序列化的操作
JSON -->JavaScript Object Notation --> JavaScript语言创建对象的自变量语法
let person = {
name:"陈来",
age: 12,
sex: True
}
person.name
person.age
这种数据格式也非常适合在两个系统(尤其是异构的系统)传输数据(因为它是纯文本),
所有今天当我们说到JSON,更多的适合是把它当成一种数据交换格式。
python中的字典跟JSON格式非常像,所有我们可以通过将字典转成JSON格式的字符串,就可以写入文件中实现持久化
"""
import json
persons = {
'name': '陈来',
'age': 18,
'sex': False,
'friends': ['小兰','小明','小李'],
'car': {
'brand': 'QQ',
'max_speed': 120
}
}
import pickle
with open('persons.dat', 'wb') as file:
pickle.dump(persons, file=file)
3、将JSON格式数据还原成字典对象
"""
1.读取文件中的JSON格式数据还原成字典对象
import json
字符串变字典
1)json.loads(读出来的数据)->file.read()->json.loads(file.read())
2)json.load(fp=file) 从文件中读出来还原成字典
字典变字符串
1)json.dump(序列,fp=file) 写进文档里
2)json.dumps(序列(字典)) ->file.write(json.dumps(序列(字典)))
import pickle
"""
import json
with open('persons.txt') as file:
obj = json.load(fp=file)
print(obj)
print(type(obj))
"""
2.读取文件中的二进制格式数据还原成字典对象
"""
import pickle
with open('persons.dat', 'rb') as file:
content = file.read()
obj = pickle.loads(content)
print(obj, type(obj))
file.seek(0)
obj = pickle.load(file=file)
print(obj, type(obj))
4、联网获取网页数据
"""
example06 - 联网获取数据
URL ---> 网址 ---> 统一资源定位符 ---> 能够唯一标识一个(网络)资源的符号
https://www.baidu.com:443/index.html
https://14.215.177.38:443/index.html
https://www.baidu.com:443/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png
协议://用户名:口令@域名或者IP地址:端口/路径1/路径2/资源名称
URI ---> 统一资源标识符 ---> URL + URN
使用三方库 requests 可以非常方便的实现通过URL访问网络资源的操作
可以使用Python的包管理工具 pip 来安装和管理三方库以及三方工具
1、pip --version 检测版本以及是否可以用pip(Terminal中检测)
2、修改 pip 下载源为国内的镜像网站(推荐使用豆瓣网的镜像)(全局设置)
pip config set global.index-url https://pypi.doubanio.com/simple
查找三方库:pip search requests
安装三方库:pip install requests 黄色警告不用管
卸载三方库:pip uninstall requests
更新三方库:pip install -U requests
协议 ---> 规范和标准 ---> 网络协议 ---> 通过网络进行通信的双方要遵守的规范和标准
HTTP ---> 超文本传输协议 ---> 请求响应式协议
import json
import requests
resp = requests.get(
url='http://apis.juhe.cn/simpleWeather/query',
params={
'city': '上海',
'key': 'e73ebce8dc3cb2f35510f4462f08430c'
}
)
weather_dict = json.loads(resp.text)
print(weather_dict['result']['realtime'])
5、操作excel文件
"""
# pip install openpyxl 下载可以读写excel文件
# Python操作excel文件
"""
import openpyxl
workbook = openpyxl.Workbook()
sheet = workbook.active
sheet.append(('姓名', '语文', '数学', '英语'))
sheet.append(('陈来', '61', '79', '70'))
sheet.append(('小新', '62', '71', '73'))
sheet.append(('小明', '64', '72', '74'))
sheet.cell(5, 1, '张三丰')
workbook.save('学生考试成绩表.xlsx')
6、通过天行数据的API接口获取头条新闻数据
from datetime import datetime
import openpyxl
import requests
workbook = openpyxl.Workbook()
sheet = workbook.active
sheet.append(('标题', '链接', '来源'))
for page in range(1, 6):
resp = requests.get(
url='http://api.tianapi.com/topnews/index',
params={
'key': 'e8c5524dd2a365f20908ced735f8e480',
'page': page,
'num': 20
}
)
result = resp.json()
for news_dict in result['newslist']:
title, url, source = news_dict['title'], news_dict['url'], news_dict['source']
sheet.append((title, url, source))
curr = datetime.now()
workbook.save(f'头条新闻数据_{curr.year}{curr.month:0>2d}{curr.day:0>2d}.xlsx')
slist']:
title, url, source = news_dict['title'], news_dict['url'], news_dict['source']
sheet.append((title, url, source))
curr = datetime.now()
workbook.save(f'头条新闻数据_{curr.year}{curr.month:0>2d}{curr.day:0>2d}.xlsx')
|