CSV 与 selenium

一. CSV的常用操作

CSV(Comma-Separated Values)即逗号分隔值,可以用Excel打开查看

1 写文件

import csv
rows = [['张三', '21'], ['李四', '31'], ['王五', '41']]
# csv文件 在写入的时候,默认每次写入一个会有一个空行作为分割
# 使用newline='' 可以将空行去掉
with open('test1.csv', 'w', newline='') as file_csv:
    writer = csv.writer(file_csv)
    for row in rows:
         writer.writerow(row)
    # 上下这两个输出的结果是一样的。
    writer.writerows([['张三', '21'], ['李四', '31'], ['王五', '41']])

上面的的代码在excel中的显示方式
2 读文件

 with open('test1.csv', 'r') as read_file:
     reader = csv.reader(read_file)
     print([row for row in rows])
     # [['张三', '21'], ['李四', '31'], ['王五', '41']]
def write_data():
    columns = int(input('请输入总列数:'))
    col_list = []
    while True:
        col_list.append([input('请输入第{}行数据'.format(n+1)) for n in range(columns)])
        is_continue = input('请输入是否继续Y/N')
        if is_continue != 'Y':
            break
            # continue 只是跳出本次循环,下次循环还是会执行
            # return 结束循环和方法,后面的代码统统不执行
    print(col_list)
 '''
请输入总列数:3
请输入第1行数据张三
请输入第2行数据李四
请输入第3行数据王五
请输入是否继续Y/NN
[['张三', '李四', '王五']]
 '''

    with open('test2.csv', 'w', newline='') as csv_file:
        writer = csv.writer(csv_file)
        for row in col_list:
            writer.writerow(row)
 write_data()

上面代码输出如图

3 字典写入方式


data_dic = [{'name': '三三', 'age': '24'}, {'name': '四四', 'age': '34'}]
with open('test3.csv', 'w', newline='') as f:
    keys = []
    for key in data_dic[0].keys():
        keys.append(key)
    # 写入一个字典到csv(excel)中, fieldnames 设置文本的标题
    writer = csv.DictWriter(f, fieldnames=keys)
    # 开始写入标题
    writer.writeheader()
    for dict in data_dic:
        writer.writerow(dict)

with open('test3.csv', 'r') as f:
    reader = csv.DictReader(f)
    print([row for row in reader])
    # [OrderedDict([('name', '三三'), ('age', '24')]), OrderedDict([('name', '四四'), ('age', '34')])]

这里写图片描述

二 selenium 的使用

1 简介:
selenium 可以完全模拟人对浏览器操作,对动态数据进行获取,动态数据由代码生成,在页面初始化的过程当中是没有的,也无法获取,但是可以通过selenium来进行获取。
有些数据是需要进行登录以后才能获取的,比如说:好友列表,评论,消费记录…登录以后获取cookie,才能进行以上的操作,但是使用selenium以后,可以避免人工登录,只需要得到账号密码即可实现selenium代替登录
2 特点:
(1) 有程序控制浏览器进行操作,而不是手动操作浏览器
(2) 程序控制浏览器进行操作的时候,速度非常慢,所以要谨慎使用selenium
(3) 使用selenium控制浏览器的时候,需要下载浏览器对应的驱动程序
(4)selenium 为开源免费,但是更新速度没有浏览器,不是selenium更新慢而是浏览器更新快,要注意selenium和浏览器之间对应的关系,引入网页驱动。
3 安装过程:
推荐使用火狐浏览器,因为谷歌浏览器会自动拦截。下面介绍两种浏览器的安装过程
(1)谷歌浏览器下载:在该网站下载的网址 根据提示选择一个比较新的版本,选择适合自己电脑的版本这里写图片描述
下载好了以后,将压缩包解压,这里暂时先解压到桌面,
这里写图片描述
(2)火狐浏览器: 在该网站下载地址 根据自己的电脑选择合适的版本
这里写图片描述
下载好了以后,同上面一样,解压压缩包的内容暂时到桌面
这里写图片描述
在上面两步都完成以后,将桌面上的解压文件复制到anaconda安装目录的scripts 文件夹中。
这里写图片描述
至此,两种浏览器基本上设置完成
测试一下,输入:

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://www.baidu.com')

在运行后出现下面的图片表示成功,黄色的背景表示不是安全链接,因为我们是模拟登录的。
这里写图片描述

4 常用方法:
selenium 提供了找到元素的方法 find element by XXX, 这下方法全部是用Python实现的
如果只是想对这个元素进行查找,定位, 建议使用xpath 或者css selector
如果需要对找到的内容进行点击等操作, 建议使用find element by XXX
这里通过百度首页输入框的元素来进行说明
这里写图片描述

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get('https://www.baidu.com')

time.sleep(4)
# 通过id进行寻找
driver.find_element_by_id('kw').send_keys('我爱你')

# 通过name 属性进行寻找
driver.find_element_by_name('kw').send_keys('si')

# 通过标签名字找
driver.find_element_by_tag_name('input').send_keys(u'你好')

# 通过选择器寻找
#   . 表示类名  # 表示id
# driver.find_element_by_css_selector('#kw')

# 通过xpath 定位一个元素
driver.find_element_by_xpath('//form[@id="form"]/span/input[@id="kw"]')

# 通过有超链接的寻找
driver.fin_element_by_link_text('贴吧')

偶尔可能会报错: selenium.common.exceptions.NoSuchElementException:Message: Unable to locate element: [id=”kw”]
原因:代码执行速度很快,但是浏览器响应速度很慢,代码执行到这里的时候,浏览器里面的元素可能还没有加载完 所以报错找不到指定的元素, 引入time模块,使用time.sleep(3), 等待几秒, 让浏览器反应一会

三 selenium 模拟登录美食杰

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get('https://i.meishi.cc/login.php?redirect=https%3A%2F%2Fwww.meishij.net%2F')

time.sleep(3)
driver.find_element_by_name('username').clear()
driver.find_element_by_name('password').clear()

time.sleep(2)
driver.find_element_by_name('username').send_keys('987654321')
time.sleep(3)
driver.find_element_by_name('password').send_keys('123456789')

time.sleep(2)
driver.find_element_by_xpath('//div[@class="nl_loginitem"]/input[@class="submit"]').click()

time.sleep(5)
driver.close()

设置这么多的sleep 是因为浏览器反应速度慢,得等一会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值