昨日回顾:
一 爬虫基本原理
- 爬虫全过程
1.发送请求
2.接受响应数据
3.解析并提取有价值的数据
4.保存数据
二 Requests请求库
- get
url
headers
cookies
- post
url
headers
cookies
data
三 爬取校花网视频
1.经过主页解析提取详情页
2.经过详情页提取视频url
3.获取视频的二进制流写进本地
四 自动登陆github
1.分析请求头与请求体信息
- 用户名
- 密码
- token
- 杂七杂八
2.token
- 经过对login页面的解析提取
3.对session_url发送请求
- headers:
- user_agent
- cookiels:
- login页面的cookies
- data:
- from_data
今日内容:
一 request 请求库爬取豆瓣电影信息
- 请求url
https://movie.douban.com/top250
- 请求方式
GET
- 请求头
user-agent
cookies
二 selenium请求库
一、什么事selenium?
最初是一个自动化测试工具,原理是驱动浏览器执行一些必定好的操做。
爬虫本质上就是模拟浏览器,因此能够使用它来作爬虫。
二、为何要使用selenium?
优势:
- 执行js代码
- 不须要分析复杂的通讯流程
- 对浏览器作弹窗、下拉等操做
- 获取动态数据 *****
- 破解登陆验证 ***
缺点:
- 执行效率低
三、安装与使用
1.安装selen请求库
pip3 install selenium
2.必须安装浏览器
谷歌或者火狐
3.安装浏览器驱动
http://npm.taobao.org/mirrors/chromedriver/2.38/
测试用例
01❤爬取豆瓣电影TOP250
1 '''
2 爬取豆瓣电影信息: 3 电影排名、电影名称、电影url、电影导演 4 电影主演、电影年份/电影类型 5 电影评分、电影评论、电影简介 6 一、分析全部主页的url 7 第一页:https://movie.douban.com/top250?start=0&filter= 8 第二页:https://movie.douban.com/top250?start=25&filter= 9 第三页:https://movie.douban.com/top250?start=50&filter= 10 '''
11 import requests 12 import re 13 # 爬虫三部曲
14 # 1.发送请求
15 def get_page(url): 16 response = requests.get(url) 17 return response 18 # 2.解析数据
19 '''
20 <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> 21 '''
22 def parse_index(html): 23 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) 24 return movie_list 25 # 3.保存数据
26 def save_data(movie): 27 top, m_url, name, director, actor, year_type, point, commit, desc = movie 28 year_type = year_type.strip('\n') 29 year_type = year_type.replace(' ', '') 30 data = f'''' 31 ❀=========================== 影片信息 ============================❀ 32 电影排名:{top} 33 电影url:{m_url} 34 电影名称:{name} 35 电影导演:{director} 36 电影主演:{actor} 37 年份类型:{year_type} 38 电影评分:{point} 39 电影评论:{commit} 40 电影简介:{desc} 41 ❀======================= 影片信息加载完毕 ========================❀ 42 '''
43 print(data) 44
45 with open('douban_top250.txt','a',encoding='utf-8') as f: 46 f.write(data) 47
48 if __name__ == '__main__': 49 # 拼接全部主页
50 num = 0 51 for line in range(10): 52 url = f'https://movie.douban.com/top250?start={num}&filter='
53 num += 25
54 print(url) 55
56 # 1.往每一个主页发送请求
57 index_res = get_page(url) 58
59 # 2.解析主页获取电影信息
60 movie_list = parse_index(index_res.text) 61
62 for movie in movie_list: 63 # 3.保存数据
64 save_data(movie)
02❤selenium基本使用
1 from selenium import webdriver #web驱动
2 from selenium.webdriver.common.by import By # 按照什么方式查找,By.ID,By.CSS_SELECTOR
3 from selenium.webdriver.common.keys import Keys # 键盘按键操做
4 from selenium.webdriver.support import expected_conditions as EC # 和下面WebDriverWait一块儿用的
5 from selenium.webdriver.support.wait import WebDriverWait # 等待页面加载某些元素
6 import time 7
8 # 方式一:经过驱动打开浏览器
9 driver = webdriver.Chrome(r'E:\Python驱动浏览器\chromedriver.exe') 10 # 方式二:把webdriver.exe驱动到 python 解释器安装目录/Scripts文件夹中
11 # python解释器安装目录/Scripts配置环境变量
12 # python解释器安装目录 配置环境变量
13 # driver = webdriver.Chrome()
14 try: 15 # 往官网发送get请求
16 driver.get('https://www.jd.com/') 17 # 获取等待对象,可等待某个元素10秒
18 wait = WebDriverWait(driver, 10) 19
20 # 查找元素id为key
21 input_tag = wait.until(EC.presence_of_element_located((By.ID, 'key'))) 22
23 # 在输入框内输入商品名称
24 input_tag.send_keys('剑网3') 25 # 按下键盘回车键
26 input_tag.send_keys(Keys.ENTER) 27 time.sleep(5) 28 finally: 29 # 关闭浏览器释放操做系统资源
30 driver.close()
03❤selenium选择器
1 ''''''
2 from selenium import webdriver # web驱动
3 from selenium.webdriver.common.keys import Keys # 键盘按键操做
4 import time 5
6 import time 7
8 driver = webdriver.Chrome(r'E:\Python驱动浏览器\chromedriver.exe') 9
10 try: 11
12 # 隐式等待: 须要在get以前调用
13 # 等待任意元素加载10秒
14 driver.implicitly_wait(10) 15
16 driver.get('https://www.baidu.com/') 17
18 # 显式等待: 须要在get以后调用
19 time.sleep(5) 20
21 '''
22 ===============全部方法=================== 23 element是查找一个标签 24 elements是查找全部标签 25 '''
26 # 自动登陆百度 start
27 # 一、find_element_by_link_text # 经过连接文本去找
28 login_link = driver.find_element_by_link_text('登陆') 29 login_link.click() # 点击登陆
30
31 time.sleep(1) 32
33 # 二、find_element_by_id # 经过id去找
34 user_login = driver.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn') 35 user_login.click() 36
37 time.sleep(1) 38
39 # 三、find_element_by_class_name
40 user = driver.find_element_by_class_name('pass-text-input-userName') 41 user.send_keys('*****') 42
43 # 四、find_element_by_name
44 pwd = driver.find_element_by_name('password') 45 pwd.send_keys('*****') 46
47 submit = driver.find_element_by_id('TANGRAM__PSP_10__submit') 48 submit.click() 49 # end
50
51 # 五、find_element_by_partial_link_text
52 # 局部连接文本查找
53 login_link = driver.find_element_by_partial_link_text('登') 54 login_link.click() 55
56 # 六、find_element_by_css_selector
57 # 根据属性选择器查找元素
58 # .: class
59 # #: id
60 login2_link = driver.find_element_by_css_selector('.tang-pass-footerBarULogin') 61 login2_link.click() 62
63 # 七、find_element_by_tag_name
64 div = driver.find_elements_by_tag_name('div') 65 print(div) 66
67
68 time.sleep(20) 69
70 finally: 71 # 关闭浏览器释放操做系统资源
72 driver.close()