day02—selenium库

昨日回顾:
一、爬虫基本原理
-爬虫全过程
1.发送请求
2.接收响应数据
3.解析并提取有价值的数据
4.保存数据
二、Resquests请求库
-get
url
header
cookies
-post
url
header
cookies
data
三、爬取校花网
1.通过主页解析提取详情页
2.通过详情页提取视频url
3.获取视频的二进制流写入本地
四、自动登录github
1.分析请求头与请求体信息
-用户名
-密码
-token
-杂七杂八
2.token
-通过对login页面的解析提取
3.对session_url发送请求
-header:
user-agent

-cookies:
login页面的cookies

-data:
form-data
今日内容:
一、requests请求库爬取豆瓣电影信息
—请求url
https://movie.douban.com/top250

—请求方式
GET

—请求头
user-agent
cookies
二、selenium请求库
1.什么是selenium
起初是自动化测试工具,原理是驱动浏览器执行一些自定义好的操作。
爬虫本质上就是模拟浏览器,所以可以使用他来做爬虫。
2.为什么要使用selenium
优点:
-执行js代码
-不需要分析复杂的通信流程
-可以对浏览器做弹窗、下拉等操作
-*****可以获取动态数据
-***可以破解登录验证
缺点;
-执行效率低
3.安装与使用
1.安装selenium请求库:
pip3 install selenium
2.必须安装浏览器:
谷歌、火狐
http://npm.taobao.org/mirrors/chromedriver/2.38/
3.安装浏览器驱动
#爬取电影
'''
爬取豆瓣电影信息:
电影名称、电影url
电影导演、电影主演
电影年份、电影类型
电影评分、电影评论
电影简介
1.分析所有主页url
第一页:
https://movie.douban.com/top250?start=0&filter=
第二页:
https://movie.douban.com/top250?start=25&filter=
'''
import requests
import re
#爬虫三部曲
# 1.发送请求
def get_page(url):
response=requests.get(url)
#print(response.text)
return response

# 2.解析数据
def parse_index(html):
'''
电影排名、电影url、电影名称、电影导演、电影主演、
电影年份/类型、电影评分、电影评论、电影简介
<div class="item">.*?<em class="">(.*?)</em>.*?<a href=".*?">.*?<span class="title">(.*?)</span>
.*?导演: (.*?)主演: (.*?)<br>.*?</p>.*?<span class="rating_num" .*?>(.*?)</span>.*?<span>(.*?)人评价</span>
.*?<span class="inq">(.*?)</span>
<div class="item">.*?<em class="">(.*?)</em>.*?<a href=".*?">.*?<span class="title">(.*?)</span>.*?导演: (.*?)主演: (.*?)<br>.*?</p>.*?<span class="rating_num" .*?>(.*?)</span>.*?<span>(.*?)人评价</span>.*?<span class="inq">(.*?)</span>
'''
movie_list=re.findall('<div class="item">.*?<em class="">(.*?)</em>.*?<a href="(.*?)">.*?<span class="title">(.*?)</span>.*?导演: (.*?)主演: (.*?)<br>(.*?)</p>.*?<span class="rating_num" .*?>(.*?)</span>.*?<span>(.*?)人评价</span>.*?<span class="inq">(.*?)</span>',
html,
re.S)
return movie_list

# 3.保存数据
def save_data(movie):
# 电影排名、电影url、电影名称、电影导演、电影主演
# 电影年份/类型、电影评分、电影评论、电影简介
top,m_url,name,daoyan,actor,year_type,point,commit,desc=movie
data=f'''
===========欢迎观赏==========
电影排名:{top}
电影url:{m_url}
电影名称:{name}
电影导演:{daoyan}
电影主演:{actor}
年份类型:{year_type}
电影评分:{point}
电影评论:{commit}
电影简介:{desc}
==========欢迎下次再来=========
'''
print(data)

with open('douban_top250.text','a',encoding='utf-8')as f:
f.write(data)

print(f'电影:{name}写入成功...')

if __name__ == '__main__':
num=0
for line in range(10):
url=f'https://movie.douban.com/top250?start={num}&filter='
num+=25
print(url)

#1.往每个主页发送请求
index_res=get_page(url)

#2.解析主页获取电影信息
movie_list=parse_index(index_res.text)

for movie in movie_list:
#print(movie)
# 3.保持数据
save_data(movie)

#selenium库的基本使用
from selenium import webdriver
from selenium.webdriver.common.by import By # 按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys # 键盘按键操作
from selenium.webdriver.support import expected_conditions as EC # 和下面WebDriverWait一起用的
from selenium.webdriver.support.wait import WebDriverWait # 等待页面加载某些元素
import time
#方式一:通过驱动打开浏览器
driver =webdriver.Chrome(r'chromedriver.exe所在的路径')

#方式二:把webdriver.exe驱动放到python解释器安装目录/Scripts文件夹中
#python解释器安装目录/Scripts配置环境变量
#python解释器安装目录,配置环境变量
try:
driver.get('https://www.jd.com/')

#获取显式等待对象10秒
#可以等待某个标签加载10秒
wait=WebDriverWait(driver,10)

#查找元素id为key
input_tag=wait.until(EC.presence_of_element_located(
(By.ID,'key')
))
time.sleep(5)

#在输入框内输入商品名称
input_tag.send_keys('公仔')

#按下回车键
input_tag.send_keys(Keys.ENTER)

time.sleep(20)
finally:
driver.close()


#选择器
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
driver = webdriver.Chrome(r'chromedriver.exe所在的路径')

try:

# 隐式等待: 需要在get之前调用
# 等待任意元素加载10秒
driver.implicitly_wait(10)

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

# 显式等待: 需要在get之后调用
time.sleep(5)

'''
===============所有方法===================
element是查找一个标签
elements是查找所有标签
'''
# 自动登录百度 start
# 1、find_element_by_link_text # 通过链接文本去找
login_link = driver.find_element_by_link_text('登录')
login_link.click() # 点击登录

time.sleep(1)

# 2、find_element_by_id # 通过id去找
user_login = driver.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn')
user_login.click()

time.sleep(1)

# 3、find_element_by_class_name
user = driver.find_element_by_class_name('pass-text-input-userName')
user.send_keys('*****')

# 4、find_element_by_name
pwd = driver.find_element_by_name('password')
pwd.send_keys('*****')

submit = driver.find_element_by_id('TANGRAM__PSP_10__submit')
submit.click()
# end

# 5、find_element_by_partial_link_text
# 局部链接文本查找
login_link = driver.find_element_by_partial_link_text('登')
login_link.click()

# 6、find_element_by_css_selector
# 根据属性选择器查找元素
# .: class
# #: id
login2_link = driver.find_element_by_css_selector('.tang-pass-footerBarULogin')
login2_link.click()

# 7、find_element_by_tag_name
div = driver.find_elements_by_tag_name('div')
print(div)


time.sleep(20)

finally:
# 关闭浏览器释放操作系统资源
driver.close()


原文地址:https://www.cnblogs.com/2328322824chx/p/11121314.html