安装教程

这个自己去网上找(纯小白安装的话比较麻烦)

第三方库安装

通过Pycharm终端安装

1
2
3
//终端安装
pip install 模块名
pip uninstall 模块名 //卸载已安装的模块

终端安装全局镜像

让你安装库时使用国内的安装源速度更快,Pycharm默认的安装源默认的是国外的,速度堪忧

1
2
3
4
5
6
7
8
9
10
//不想使用全局镜像源,可以通过如下命令单次使用镜像源下载第三方库:
pip install 模块名 -i 国内镜像地址
//全局镜像源配置
pip install --upgrade pip
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
//国内常用源镜像地址
清华:https://pypi.tuna.tsinghua.edu.cn/simple
中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
阿里云:https://mirrors.aliyun.com/pypi/simple/
华中理工大学:http://pypi.hustunique.com/

Python爬虫实战一

此段代码只适用请求json格式的数据,不适用html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import requests
import json
import sys
import time
import pandas as pd

# 目标网站的登录URL
login_url = 'https://test.com'

# 登录需要的用户名和密码
username = '账号'
password = '密码'

# 设置headers,包括User-Agent
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0',
# 可以添加其他自定义的headers
}
# 创建一个Session对象,以便能够保持会话状态
with requests.Session() as session:
session.headers.update(headers)
# 发送登录请求
responses = session.post(login_url, data={'email': username, 'password': password})
if not responses.ok:
print('登录失败')

# 检查是否登录成功
else:
print('登录成功')

def get_page_data(url, params):
# 使用params字典来传递URL参数
response = requests.get(url, params=params)
# 检查请求是否成功
if response.status_code == 200:
# 假设响应体是JSON格式
return response.json()
else:
print(f"Failed to retrieve page with status code {response.status_code}")
return None

def crawl_paginated_data(url, start_page, end_page, base_params):
all_data = []
# 遍历指定范围内的所有页面
for page in range(start_page, end_page + 1):
# 创建当前页的params字典,基于base_params并更新page参数
page_params = base_params.copy()
page_params['page'] = page
# 在请求下一页之前等待3秒
time.sleep(3)
# 获取当前页面的数据
page_data = get_page_data(url, page_params)
# 打印当前页数
# 如果成功获取数据,则处理数据
if page_data:
# 假设数据在列表形式的'data'键下,具体结构需要根据实际API响应来调整
data_list = page_data.get('data', {}).get('videoList', [])
all_data.extend(data_list)
# 打印当前页码和获取到的数据条数
# print(f"Page {page} crawled. Found {len(data_list)} items.")
return all_data

# 替换为实际的API地址
url = '数据列表请求的基础链接URL 下面base_params是链接后的参数'
# 开始页码
start_page = 1
# 结束页码
end_page = 1
# 定义基础参数,不包括分页参数
base_params = {
'o': 't',
'lang': 'cn',
'u': '545efd60-70c6-41eb-86bc-b62931f02637',
't': '0'
}
# 设置Excel文件的表头
headers = ['标题', '昵称', '时长', '链接码', 'URL']
# 初始化一个空的DataFrame列表来存储所有的数据
data_frames = []
# 初始化循环次数计数器
count = 0
# 爬取分页数据
data_list = crawl_paginated_data(url, start_page, end_page, base_params)
for item in data_list:
# 在每次迭代中,增加计数器
count += 1
# url
url = f"https://test.com/get?lang=cn&v={item.get('i')}&u=参数一&p=参数二"
response = requests.get(url)
# 确保请求成功
if response.status_code == 200:
# 解析JSON数据
item_data = response.json()
# 提取data下的v字段的数据
excel_data = item_data['data']['v']
# 提取data下v的数据
data = item_data['data']['v']
# 提取v下o的数据
o_data = data['o']
# 打印
print(f"获取成功---->[次数:{count}][标题:{data['t']}]")
# 创建一个字典,包含你想要保存的数据和对应的键
row_data = {
'标题': data['t'],
'昵称': o_data['n'],
'时长': data['d'],
'链接码': data['i'],
'URL': f"打印到Excel文档中的URL格式例如下面注释"
# 'URL': f"https://ns{data['l']}.zmq71.site/{data['url']}"
}
# 将字典转换为DataFrame,并添加到列表中
df = pd.DataFrame([row_data])
data_frames.append(df)
else:
print(f"请求失败,状态码:{response.status_code}")

# 如果data_frames列表不为空,则合并所有的DataFrame
if data_frames:
# 使用concat合并所有DataFrame,假设所有的DataFrame都有相同的列
result_df = pd.concat(data_frames, ignore_index=True)
# 将合并后的DataFrame保存到Excel文件,并设置表头(实际上表头已经在每个DataFrame中设置了)
excel_file = '测试1.xlsx'
result_df.to_excel(excel_file, index=False)
else:
print("没有获取到任何数据。")