(声明:本文只用于记录Java开发者学习Python基础、爬虫学习,持续更新,可能很基础,欢迎指正,不喜勿喷)
1、爬虫原理就是通过编写程序获取互联网上的资源,包括Java、Python、JS等,因为Python语言简洁所以被广泛应用于爬虫开发。
2、爬虫可以拆解为需求:首先打开一个网站,然后读取这个网站的内容,再保存自己想要的内容到文件或其它。
1、导入url操作的包(urllib.request),然后模拟打开目标网址,获取请求内容
from urllib.request import urlopen
url = "http://www.baidu.com"
resp = urlopen(url)
#直接输出的是字节,python输出中字节的标识:b'
print(resp.read())
输出示例:
注意:python默认输出的是字节,可以在输出内容的开头看到 b' ,这就是字节的标识,
根据输出内容中charset=UTF-8得知,是UTF-8编码,所以在解码时用UTF-8解码就可获取内容
from urllib.request import urlopen
url = "http://www.baidu.com"
resp = urlopen(url)
#直接输出的是字节,python输出中字节的标识:b'
#print(resp.read())
print(resp.read().decode('utf-8'))
此时输出的就是html内容
3、将请求内容保存到本地文件
from urllib.request import urlopen
url = "http://www.baidu.com"
resp = urlopen(url)
# 直接输出的是字节,python输出中字节的标识:b'
# print(resp.read())
#print(resp.read().decode('utf-8'))
with open("E:\爬虫\\baidu_resp.txt", mode="w", encoding="utf-8") as f:
f.write(resp.read().decode('utf-8'))
print("over")
1.1基础语法:open(name, mode=None, buffering=None):
参数解析:
name:文件名或文件路径(绝对路径或相对路径)
mode:操作类型
'r': 只读模式。默认模式,如果文件不存在,会引发异常。
'w': 写模式。如果文件不存在,则创建文件。如果文件已存在,则清空文件并写入新内容。
'x': 独占创建模式。如果文件不存在,则创建文件。如果文件已存在,则引发异常。
'a': 追加模式。如果文件不存在,则创建文件。如果文件已存在,则将新内容添加到文件末尾。
'b': 二进制模式。与其他模式一起使用,例如 'rb' 或 'wb'。处理非文本数据(如图片、音频、视频等)时必须使用'wb'
't': 文本模式。与其他模式一起使用,例如 'rt' 或 'wt'。
buffering:设置缓冲区的大小。如果省略或为0,则不进行缓冲。如果为1,则行缓冲。如果大于1,则为缓冲区大小
#如果只使用open()方法,需要手动关闭写入操作:
f = open("file.txt", "w") # 写入模式(覆盖)
f.write("Hello, World!")
f.close() # 必须手动关闭
所以最好使用with语法,相当于Java中的try(),会自动关闭:
with open("file.txt", "w") as f:
f.write("Hello, World!")
1.2、writelines()方法(不会自动添加换行符,需在每行末尾手动添加 \n
)
将一个字符串写入文件,可以写入多行
with open('example.txt', 'w') as f:
lines = ['Hello, world!', 'Welcome to Python']
f.writelines(lines)
1.3、写入csv,使用 csv 模块:可以使用 csv 模块将数据写入 CSV 文件。例如:
import csv
with open('example.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['Name', 'Age', 'Gender'])
writer.writerow(['Alice', 25, 'F'])
writer.writerow(['Bob', 30, 'M'])
1.4、写入json,使用 json 模块:可以使用 json 模块将 Python 对象写入 JSON 文件。例如:
import json
data = {
'name': 'Alice',
'age': 25,
'gender': 'F'
}
with open('example.json', 'w') as f:
json.dump(data, f)
from pathlib import Path
Path("file.txt").write_text("Hello, Pathlib!")
优点:
代码简洁,适合快速写入少量内容,自动处理文件打开和关闭。
缺点:
一次性写入全部内容,不适合大文件,灵活性较低(如无法分批次写入)。