Python实习第四天代码
程序员文章站
2022-04-19 09:43:40
CSV文件什么是CSV文件?CSV文件是一种可以被excel打开的文件,本质是表格,在python爬虫中有很大的作用。CSV文件的格式是用逗号隔开,如:name,age,height字典,列表都能够转换成CSV文件CSV文件操作在操作前先在项目文件夹下新建一个file文件夹1.操作字典import csvstudents = [ {'name': '小明1', 'age': 19, 'gender': '女'}, {'name': '小明2', 'age': 19, 'ge...
CSV文件
什么是CSV文件?
CSV文件是一种可以被excel打开的文件,本质是表格,在python爬虫中有很大的作用。CSV文件的格式是用逗号隔开,如:name,age,height
字典,列表都能够转换成CSV文件
CSV文件操作
在操作前先在项目文件夹下新建一个file文件夹
1.操作字典
import csv
students = [
{'name': '小明1', 'age': 19, 'gender': '女'},
{'name': '小明2', 'age': 19, 'gender': '男'},
{'name': '小明3', 'age': 20, 'gender': '男'},
{'name': '小明4', 'age': 18, 'gender': '女'},
]
with open('file/student1.csv', mode='w', newline='', encoding='utf-8') as fw:
# ['name', 'age', 'gender']为表格的列名
# 由于字典有key,value 它要转成csv格式要用DictWriter()
# 大概思路就是把key,value分开,key作为列名打印在第一行,value正常打印
# DicWriter(普通文件流->fw,列名数组)
writer = csv.DictWriter(fw, fieldnames=['name', 'age', 'gender'])
# 先写列名
writer.writeheader()
writer.writerows(students)
with open('file/student1.csv', mode='r', encoding='utf-8') as fr:
# DicReader和DictWriter相照应
reader = csv.DictReader(fr, fieldnames=['name', 'age', 'gender'])
print(reader)
for line in reader:
print(line)
2.操作列表
students = [
['小红1', 18, 'python01'],
['小红2', 19, 'python02'],
['小红3', 20, 'python01'],
['小红4', 19, 'python02']
]
# writer: 可以使用的方法:1。 writerow写一行 2。writerows 写多行
import csv
with open('file/student.csv', mode='w', newline='',encoding='utf-8') as fw:
writer = csv.writer(fw)
# 一次性写多行用writerows
writer.writerows(students)
# for student in students: # ('小红1', 18, 'python01'),
# writer.writerow(student)
with open('file/student.csv', mode='r',encoding='utf-8') as fr:
reader = csv.reader(fr)
# 可以直接通过遍历reader得到csv文件每行的内容
# 借助line_num获取行号
# reader 可以遍历,可以使用for。。。in
for line in reader:
print(reader.line_num)
print(line) # ['小红1', '18', 'python01']
爬虫介绍
什么是爬虫?
爬虫是一种可以模拟浏览器操作的机器人,正常我们用浏览器操作时是用鼠标进行点击浏览,而我们爬虫就是一个网络机器人,它会模拟你的上网冲浪所有操作,比如点击,拖动,下载,切换,刷新等
下图是爬虫和浏览器的关系:
可上网工具 | 性能特点 |
---|---|
谷歌浏览器等其他浏览器 | 可以看到网页,用户可以网上冲浪 |
python等网络爬虫 | 看不到网页,看不到界面但是可以模拟网上冲浪 |
爬虫 | 浏览器 |
---|---|
可以用代码模拟用户点击按钮,输入文字等操作。操作速度快 | 需要用户点击按钮,输入文字。操作速度慢 |
可以获取分析大量数据 | 只能进行上网观看数据 |
爬虫可以干什么?
1.可以快速下载网页小说
2.可以快速转换excel表格
3.可以疯狂点赞
下面就介绍一些简单的爬虫吧
爬虫基础(爬取整个网页)
*1. urllib
1 最简单的爬虫例子(没有伪装)
from urllib import request
url = 'http://www.baidu.com'
req = request.urlopen(url)
content = req.read()
with open('file/baidu.html',mode='wb') as fw:
fw.write(content)
这个虽然简单但是由于没有伪装,所以很容易被发现
2 头请求伪装
import random
import ssl
from urllib import request
url = 'http://www.baidu.com'
# 请求头可以百度搜索到也可以f12分析到
header_list = [
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0",
"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko"
]
# 请求体需要按下f12分析得到
headers = {
'Host': 'www.baidu.com',
'Connection': 'keep-alive',
# 随机请求头
'User-agent': random.choice(header_list)
}
print(headers.get('User-agent'))
# 1。创建request对象
request_obj = request.Request(url=url,headers=headers)
# 2。发出请求
# 忽略ssl证书认证错误
context=ssl._create_unverified_context()
# 添加到responce回应中规避ssl证书错误
response = request.urlopen(request_obj,context=context)
# 3.读取内容
content = response.read()
# 保存到本地
with open('file/baidu.html', mode='wb') as fw:
fw.write(content)
3 ip伪装
# ip代理池
from urllib import request
import random
headers = {
'Host': 'www.baidu.com',
'Connection': 'keep-alive',
'User-agent': "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko"
}
# 可用代理ip
proxylist=[
{'http':'119.119.136.164'},
{'http':'221.180.170.104:8080'}
]
# 随机取用代理ip
proxy=random.choice(proxylist)
print(proxy)
# 创建代理处理器对象
proxhander=request.ProxyHandler(proxy)
# 处理代理请求
opener=request.build_opener(proxhander)
req=request.Request('http://www.baidu.com',headers=headers)
# 发出请求
response=opener.open(req)
content=responce.read()
with open('file/baidu2.html', mode='wb') as fw:
fw.write(content)
*2.requests
这个request包非常好用撒
这个request包需要进行下载
找到terminal输入:pip3 install -i https://pypi.doubanio.com/simple/ requests进行安装
1.利用request爬取查询python关键字的网页
import requests
# 网络资源地址
url = "https://www.sogou.com/web"
# 字典类型的请求头
header={ 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0'}
# 实现请求头伪装、ip伪装技术
response = requests.get(url=url,headers=header,params={'query':'python'},proxies={'http':'202.121.178.244:8080'})
# 打印网路状态码 200正常
print(response.status_code)
# 打印当前网页编码
print(response.encoding)
# 保存网页到本地
with open('file/sogou.html',mode='w',encoding='utf-8')as fw:
fw.write(response.text)
request可以一并实现 各种伪装
代码简短,深受大家喜爱
本文地址:https://blog.csdn.net/chengqige/article/details/107244033