昨日回顾:
一 爬虫基本原理
- 爬虫全过程
1.发送请求
2.接收响应数据
3.解析并提取有价值的数据
4.保存数据css
二 Requests请求库
- get
url
headers
cookieshtml
- post
url
headers
cookies
data
三 爬取校花网视频
1.经过主页解析提取详情页
2.经过详情页提取视频url
3.获取视频的二进制流写入本地python
四 自动登陆github
1.分析请求头与请求体信息
- 用户名
- 密码
- token
- 杂七杂八git
2.token
- 经过对login页面的解析提取github
3.对session_url发送请求
- headers:
- user-agentweb
- cookies:
- login页面的cookieschrome
- data:
- form_datanpm
今日内容:windows
一 requests请求库爬取豆瓣电影信息
- 请求url
https://movie.douban.com/top250浏览器
- 请求方式
GET
- 请求头
user-agent
cookies
二 selenium请求库
一、什么是selenium?
期初是一个自动化测试工具,原理是驱动
浏览器执行一些必定好的操做。爬虫本质
上就是模拟浏览器,因此可使用它来作爬虫。
二、为何要使用selenium?
优势:
- 执行js代码
- 不须要分析复杂的通讯流程
- 对浏览器作弹窗、下拉等操做
- ***** 获取动态数据
- *** 破解登陆验证
缺点:
- 执行效率低
三、安装与使用
1. 安装selenium请求库:
pip3 install selenium
2. 必须安装浏览器
"谷歌"或者火狐
3.安装浏览器驱动
http://npm.taobao.org/mirrors/chromedriver/2.38/
windows:
下载win32驱动
'''
项目一:爬取豆瓣电影信息:
电影排名、电影名称、电影url、电影导演
电影主演、电影年份、电影类型
电影评分、电影评论、电影简介
一、分析全部主页的url
第一页:
https://movie.douban.com/top250?start=0&filter=
第二页:
https://movie.douban.com/top250?start=25&filter=
第三页:
https://movie.douban.com/top250?start=50&filter=
'''
import requests import re # 爬虫三部曲 # 一、发送请求 def get_page(url): response = requests.get(url) # print(response.text) return response # 二、解析数据 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 # 三、保存数据 def save_data(movie): # 电影排名、电影url、电影名称、电影导演、电影主演 # 电影年份 / 电影类型、电影评分、电影评论、电影简介 top, m_url, name, daoyan, actor, year_type, \ point, commit, desc = movie year_type = year_type.strip('\n') data = f''' ======== 欢迎尊敬官人观赏 ======== 电影排名:{top} 电影url:{m_url} 电影名称:{name} 电影导演:{daoyan} 电影主演:{actor} 年份类型:{year_type} 电影评分:{point} 电影评论:{commit} 电影简介:{desc} ======== 请官人下次再来哟 ======== \n \n ''' print(data) with open('douban_top250.txt', '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)
项目二:02selenium基本使用
from selenium import webdriver # web驱动 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 import time # 方式一: 经过驱动打开浏览器 # driver = webdriver.Chrome(r'驱动的绝对路径/webdriver.exe') # 方式二: 把webdriver.exe驱动放到 python解释器安装目录/Scripts文件夹中 # python解释器安装目录/Scripts配置环境变量 # python解释器安装目录 配置环境变量 driver = webdriver.Chrome() 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()
项目三:selenium选择器
'''''' from selenium import webdriver # web驱动 from selenium.webdriver.common.keys import Keys # 键盘按键操做 import time import time driver = webdriver.Chrome() try: # 隐式等待: 须要在get以前调用 # 等待任意元素加载10秒 driver.implicitly_wait(10) driver.get('https://www.baidu.com/') # 显式等待: 须要在get以后调用 time.sleep(5) ''' ===============全部方法=================== element是查找一个标签 elements是查找全部标签 ''' # 自动登陆百度 start # 一、find_element_by_link_text # 经过连接文本去找 login_link = driver.find_element_by_link_text('登陆') login_link.click() # 点击登陆 time.sleep(1) # 二、find_element_by_id # 经过id去找 user_login = driver.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn') user_login.click() time.sleep(1) # 三、find_element_by_class_name user = driver.find_element_by_class_name('pass-text-input-userName') user.send_keys('*****') # 四、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 # 五、find_element_by_partial_link_text # 局部连接文本查找 login_link = driver.find_element_by_partial_link_text('登') login_link.click() # 六、find_element_by_css_selector # 根据属性选择器查找元素 # .: class # #: id login2_link = driver.find_element_by_css_selector('.tang-pass-footerBarULogin') login2_link.click() # 七、find_element_by_tag_name div = driver.find_elements_by_tag_name('div') print(div) time.sleep(20) finally: # 关闭浏览器释放操做系统资源 driver.close()