当前位置: 移动技术网 > IT编程>脚本编程>Python > Python实习第四天代码

Python实习第四天代码

2020年07月12日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网