欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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实习第四天代码

可上网工具 性能特点
谷歌浏览器等其他浏览器 可以看到网页,用户可以网上冲浪
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进行安装
Python实习第四天代码

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