day16-简单网页数据爬取

day16-简单网页数据爬取

1、练习

"""
将100以内的素数输出到一个文件中

"""
def is_prime(num:int)->bool:
    """
    判断一个正整数是不是素数
    :param num: 正整数
    :return: 素数返回True,否则返回False
    """
    # for i in range(2,num):
    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):
            # print(n, file=file) # 打印到指定文件中
            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
    }
}
# # with open('dict.txt', 'w', encoding='utf-8') as f:
# #     f.write(str(persons))
# with open('persons.txt','w') as file: # eval函数不用**
#     # json序列化(以下三种方法是一样的)(其他也可以读Java,python)
#     file.write(json.dumps(persons))
#     # print(json.dumps(persons),file=file)
#     # json.dump(persons,fp=file) #persons 内容转成字符串 写进filew文件中

import pickle
with open('persons.dat', 'wb') as file: # eval函数不用
    # pickle二进制序列化(只有python可以读)
    # print(json.dumps(persons),file=file)
    pickle.dump(persons, file=file) #persons 内容转成字符串 写进filew文件中

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:
    # content = file.read() # 先读出来
    # # 反序列化:将字符串还原成(字典)对象
    # 从文件中读取字符串还原成字典对象
    # obj = json.loads(content) # 再还原。加载字典、列表 obj对象
    # print(obj, type(obj))

    # # 反序列化:将字符串还原成(字典)对象
    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)) # shift + 大写字母 #聚合数据
#   juhe.cn

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.1先更改将Windows PowerShell改为venv虚拟环境: Windows PowerShell-->venv
 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

#** get函数会通过你指定的URL向Web服务器发起一个请求,该函数会返回一个响应对象
# reformat code自动格式化代码  天气获取 
resp = requests.get(
    url='http://apis.juhe.cn/simpleWeather/query',  # api文档查看必填值
    params={
        'city': '上海',
        'key': 'e73ebce8dc3cb2f35510f4462f08430c'
    }
)
#获取网址,二进制的数据content(图片是二进制数据)
# print(resp.text)
# 获取服务器响应的内容并将其反序列化成一个字典对象
weather_dict = json.loads(resp.text) # 将字符串转换为字典
print(weather_dict['result']['realtime'])
# futures = weather_dict['result']['future']
# for future in futures:
#     print(future)

5、操作excel文件

"""
# pip install openpyxl 下载可以读写excel文件
# Python操作excel文件
"""
import openpyxl
# 创建一个excel工作簿
workbook = openpyxl.Workbook()# excel工作簿(一个excel文件),工作表,单元格
# workbook.create_sheet('hello') # 创建
# 获取默认的工作表
sheet = workbook.active
# 添加表头(添加数据)
sheet.append(('姓名', '语文', '数学', '英语'))
sheet.append(('陈来', '61', '79', '70'))
sheet.append(('小新', '62', '71', '73'))
sheet.append(('小明', '64', '72', '74'))
sheet.cell(5, 1, '张三丰') # 第几行的第几列写一个数据
# 保存工作簿(ctrl+v删除,ctrl+d复制)
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
        }
    )
# news_dict = resp.json() #拿到新闻字典
# print(news_dict)
#     result = resp.json()  # 拿到新闻字典
#     for news_dict in result['newslist']:
#         print(news_dict['title'])
#         print(news_dict['url'])
#         print(news_dict['source'])
#         print('-'*50)

    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')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值