【千锋Python2205班10.19笔记-day03-csv和selenium(一阶段)】

01-review

from selenium.webdriver import Chrome

b = Chrome()
b.get('https://www.baidu.com')

02-csv文件操作

1. 什么是csv文件 -

逗号分隔值文件

一种后缀是.csv的文本文件,文件中每一行通过逗号分割成不同的列。
csv可以用excel软件像打开excel文件一样去打开。

import csv

2. csv文件读操作

1)创建reader

# csv.reader(文件对象)  -   创建reader获取文件内容,文件内容每一行一个列表的形式返回

# csv.DictReader(文件对象)  -   创建reader获取文件内容,文件内容每一行一个字典,并且将第一行的数据作为键的形式返回

f = open('files/电影.csv', 'r', encoding='utf-8', newline='')

# reader = csv.reader(f)

reader = csv.DictReader(f)

# reader获取文件内容,将每一行内容作为一个迭代器中的元素返回

print(next(reader))
print(next(reader))
print(list(reader))

f.close()

3. csv文件写操作

1) 创建一个writer

# csv.writer(文件对象)      -       写入数据的时候每一行数据对应一个列表

writer1 = csv.writer(open('files/students1.csv', 'w', encoding='utf-8', newline=''))

2)写入数据

# 一次写一行

writer1.writerow(['姓名', '年龄', '性别', '电话'])
writer1.writerow(['小明', 18, '男', '110'])

# 一次写入多行数据

writer1.writerows([
    ['小花', 20, '女', '120'],
    ['张三', 30, '男', '119']
])

print('------------------------------------------华丽的分割线------------------------------------------------')

# csv.DictWriter(文件对象, 键列表)

writer2 = csv.DictWriter(open('files/students2.csv', 'w', encoding='utf-8', newline=''), ['姓名', '年龄', '性别', '电话'])

# 将字典的键作为第一行内容写入到文件中

writer2.writeheader()

# 一次写入一行数据

writer2.writerow({'姓名': '小明', '年龄': 18, '性别': '男', '电话': '110'})
writer2.writerow({'姓名': '小花', '年龄': 20, '性别': '女', '电话': '120'})

# 一次写入多行数据

writer2.writerows([
    {'姓名': '小红', '年龄': 22, '性别': '女', '电话': '119'},
    {'姓名': '张三', '年龄': 30, '性别': '男', '电话': '120'}
])

03-豆瓣电影Top250

import requests
from bs4 import BeautifulSoup
from re import *
import csv


def get_one_page_data(start):
    url = f'https://movie.douban.com/top250?start={start}&filter='
    headers = {
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
    }
    response = requests.get(url, headers=headers)
    analysis_one_page_data(response.text)


def analysis_one_page_data(html):
    """解析数据"""
    soup = BeautifulSoup(html, 'lxml')
    all_div = soup.select('ol.grid_view>li>div.item')
    all_data = []
    for div in all_div:
        # 标题
        title = div.select_one('.title').text

        # 导演、主演、时间、国家、类型
        info = div.select_one('div.bd>p').text.strip()
        info1, info2 = info.split('\n')
        info1 = sub(r'\s+', '', info1)
        info2 = sub(r'\s+', '', info2)

        director = findall(r'导演:(.+)主|导演:(.+)', info1)[0][0]
        star = findall(r'主演:(.+)', info1)
        if star:
            star = star[0]
        else:
            star = ''

        info2 = info2.split('/')
        time = info2[0]
        country = info2[1]
        film_type = info2[2]

        conmment = div.select('.star>span')[-1].text[:-3]
        score = div.select_one('.star>.rating_num').text
        all_data.append([title, score, conmment, time, country, film_type, director, star])

    writer.writerows(all_data)
    print('一页数据获取成功!')


if __name__ == '__main__':
    writer = csv.writer(open('files/Top250电影.csv', 'w', encoding='utf-8', newline=''))
    writer.writerow(['名称', '评分', '评论人数', '上映时间', '国家', '类型', '导演', '主演'])

    for start in range(0, 226, 25):
        get_one_page_data(start)

04-selenium基本语法

from selenium.webdriver import Chrome
from bs4 import BeautifulSoup

1. 创建浏览器打开网页

b = Chrome()
b.get('https://cd.zu.ke.com/zufang')

2. 获取网页源代码

html = b.page_source

3. 关闭浏览器

b.close()
# 解析数据

soup = BeautifulSoup(html, 'lxml')
result = soup.select('.twoline')
for x in result:
    print(x.text.strip())

05-selenium输入和点击控制

from selenium.webdriver import Chrome

1. 创建浏览器打开页面

b = Chrome()
b.get('https://www.jd.com/')

2.通过浏览器获取想要控制的标签

# b.find_element_by_id(id属性值)       -   获取当前页面中id属性值为指定值的标签

# b.find_element_by_class_name(class属性值)        -   获取当前页面中class属性值为指定值的第一个标签

# b.find_element_by_css_selector(css选择器)    -   在当前页面中获取css选择器选中的第一个标签

# b.find_elements_by_class_name(class属性值)        -   获取当前页面中所有class属性值为指定值的标签, 返回一个列表

# b.find_elements_by_css_selector(css选择器)    -   在当前页面中获取css选择器选中的所有标签,返回一个列表

input_tag = b.find_element_by_id('key')
seckill = b.find_elements_by_class_name('navitems-lk')[2]

3. 操作标签

# 标签对象.click()      -       点击指定标签

# seckill.click()

# 标签对象.send_keys(想要输入的内容)       -       控制输入框输入指定内容

input_tag.send_keys('电脑\n')

06-selenium控制豆瓣练习

from selenium.webdriver import Chrome
from time import sleep

b = Chrome()
b.get('https://movie.douban.com/top250')

sleep(1)

# 获取输入框

search = b.find_element_by_id('inp-query')

# 输入框输入内容

search.send_keys('哈利波特\n')

sleep(1)

# 获取影评按钮

comment_btn = b.find_element_by_css_selector('.nav-items>ul>li:nth-child(5)>a')
comment_btn.click()

07-selenium滚动操作

from selenium.webdriver import Chrome
from time import sleep
from bs4 import BeautifulSoup

b = Chrome()
b.get('https://search.jd.com/Search?keyword=%E7%94%B5%E8%84%91&enc=utf-8&wq=%E7%94%B5%E8%84%91&pvid=fa66f90b245d40e5aa3f868a7471d539')

1. 让页面滚动:

浏览器对象.execute_script('window.scrollBy(x方向偏移量, y方向偏移量)')

for _ in range(10):
    b.execute_script('window.scrollBy(0, 800)')
    sleep(1)


soup = BeautifulSoup(b.page_source, 'lxml')
all_li = soup.select('#J_goodsList>ul>li')
print(len(all_li))

b.close()

08-selenium选项卡切换

from selenium.webdriver import Chrome
from time import sleep

b = Chrome()
b.get('https://www.cnki.net/')

获取输入框

search = b.find_element_by_id('txt_SearchText')
search.send_keys('数据分析\n')

sleep(1)

获取所有搜索结果对应的标签

all_a = b.find_elements_by_css_selector('.result-table-list tr>td.name>a')

点击第一个a标签

all_a[0].click()

sleep(1)

切换窗口到第二个窗口中

# b.window_handles  -  获取当前浏览器中所有的选卡

b.switch_to.window(b.window_handles[-1])

# print(b.page_source)

b.close()

回到第一个窗口

b.switch_to.window(b.window_handles[0])

点击第二个a标签

sleep(1)
all_a[1].click()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值