Day 02

python学习网 2019-07-03 06:00:06
昨日回顾:
一 爬虫基本原理
- 爬虫全过程
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请求库
1、什么事selenium?
最初是一个自动化测试工具,原理是驱动浏览器执行一些一定好的操作。
爬虫本质上就是模拟浏览器,所以可以使用它来做爬虫。
2、为什么要使用selenium?
优点:
- 执行js代码
- 不需要分析复杂的通信流程
- 对浏览器做弹窗、下拉等操作
- 获取动态数据 *****
- 破解登录验证 ***
缺点:
- 执行效率低
3、安装与使用
1.安装selen请求库
pip3 install selenium
2.必须安装浏览器
谷歌或者火狐
3.安装浏览器驱动
http://npm.taobao.org/mirrors/chromedriver/2.38/

测试用例
01❤爬取豆瓣电影TOP250
 1 '''
 2 爬取豆瓣电影信息:
 3     电影排名、电影名称、电影url、电影导演
 4     电影主演、电影年份/电影类型
 5     电影评分、电影评论、电影简介
 6 1、分析所有主页的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     # 1、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     # 2、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     # 3、find_element_by_class_name
40     user = driver.find_element_by_class_name('pass-text-input-userName')
41     user.send_keys('*****')
42 
43     # 4、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     # 5、find_element_by_partial_link_text
52     # 局部链接文本查找
53     login_link = driver.find_element_by_partial_link_text('')
54     login_link.click()
55 
56     # 6、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     # 7、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()

 



阅读(2314) 评论(0)