前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第一次爬虫尝试

第一次爬虫尝试

作者头像
土土
发布2022-09-26 14:57:13
3090
发布2022-09-26 14:57:13
举报
文章被收录于专栏:geez

实践刚学两天的python爬虫

乐乐课堂视频爬取

代码语言:javascript
复制
import re
from datetime import datetime
from os import error
from urllib import request, error
try:
    page = 1
    video_url = []
    code = 0
    file_number = 1
    pages = 10
    cid = 275359
    for a in range(pages):
        while True:
            resp = request.urlopen("http://www.leleketang.com/let3/knowledge_list.php?cid={}&p={}".format(cid, page))
            html = resp.read().decode("utf-8")
            video_url = re.findall("http://.+.mp4", html)
            if len(video_url) != 0:
                break
            else:
                video_url = []
        print(video_url)
        print("共有{}个视频正在下载".format(len(video_url)))
        for img in video_url:
            file_name = "/Users/yejizhi/Desktop/video/{}.mp4".format(file_number)
            request.urlretrieve(img, file_name)
            file_number = file_number+1
        print("{}个视频已下载完成".format(len(video_url)))
        video_url = []
        page = page+1
        
except error.HTTPError as e:
    print("error:{}".format(e.code))

流程图表示:

流程图
流程图

cid指的是服务器发送来的数据链接尾巴的一个变量

在网页中打开开发者工具Network可以获取到它

例如https://www.leleketang.com/let3/knowledge_list.php?cid=252843&p=1

尾巴的252843就是cid的值,每个年级每本教材都有一个对应的cid,可以直接替换

p为当前页码

在这个网页的源代码中可以找到mp4格式视频地址

所以代码中的cid和pages需要手动修改

pages指的是一共有多少页

有时间我再完善代码让它可以自动获取总页数

奥运会运动员信息爬取

这是我之前学习爬虫时的一个课堂作业

源代码如下:

代码语言:javascript
复制
import json
from urllib import request
import time,random
import csv

all_athlete = []

for page in range(1, 29):
    url = "https://gw.m.163.com/olympic/2020/athleteList/chinaAllItem_{}.json".format(page)
    resp = request.urlopen(url)
    data = resp.read().decode("utf-8")
    data_obj = json.loads(data) #json转python
    athleteLst = data_obj["data"]["ul"]
    for athlete in athleteLst:
        d_url = "https://gw.m.163.com/olympic/2020/athlete/{}.json".format(athlete["athleteId"])
        d_resp = request.urlopen(d_url)
        d_data = json.loads(d_resp.read().decode("utf-8"))
        #print(d_data)
        athlete_info = d_data["data"]["athleteInfo"]
        node = {}
        node["name"] = athlete["athleteName"]
        info_lst = athlete_info.split("#")
        for info_item in info_lst:
            item_data = info_item.split(":")
            if item_data[0] == "姓名":
                node["sex"] = item_data[1]
            elif item_data[0] == "生日":
                node["birthday"] = item_data[1]
            elif item_data[0] == "项目":
                node["item"] = item_data[1]
        
        all_athlete.append(node)
        print("=", end="", flush=True)
        time.sleep(random.randint(1,3))

with open("/Users/yejizhi/Desktop/athlete.csv", "w", encoding = "utf-8", newline = "") as f:
    field_name = ["name","sex","birthday","item"]
    writer = csv.DictWriter(f, fieldnames = field_name)

    for athlete in all_athlete:
        writer.writerow(athlete)
print("爬虫结束")

原理是从云端发送来的json数据使用python爬虫下来再进行字符串分割保留需要的内容

写进csv表格文件里

athlete

马龙

1988.10.20

乒乓球

朱婷

1994.11.29

排球

苏炳添

1989.8.29

田径

谌龙

1989.1.18

羽毛球

张常宁

1995.11.06

排球

刘诗雯

1991.4.12

乒乓球

范忆琳

1999.11.11

竞技体操

吕小军

1984.7.27

举重

谢文骏

1990.7.11

110米栏

黄常洲

1994.8.20

跳远

高兴龙

1994.3.12

跳远

杜凯琹

1996.11.27

乒乓球

王嘉男

1996.8.27

跳远

张耀广

1993.6.21

跳远

苏慧音

1998.4.13

乒乓球

朱亚明

1994.5.4

三级跳远

李皓晴

1992.11.24

乒乓球

吴瑞庭

1995.11.29

三级跳远

王宇

1991.8.18

跳高

郑怡静

1992.2.15

乒乓球

黄博凯

1996.9.26

撑杆跳高

陈思羽

1993.8.1

乒乓球

蔡泽林

1991.4.11

竞走

郑先知

1993.4.18

乒乓球

罗亚东

1992.1.15

竞走

吕秀芝

1993.10.26

竞走

……

……

……

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年8月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 乐乐课堂视频爬取
  • 奥运会运动员信息爬取
相关产品与服务
云开发 CLI 工具
云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档