我的随笔三
昨日回顾:
一 爬虫基本原理 - 爬虫全过程 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
- cookies:
- login页面的cookies
- data:
- form_data
今日内容:
一、requests请求库爬取豆瓣电影信息
二、selenium请求库
一、requests请求库爬取豆瓣电影信息
--请求url
https://movie.douban.com/top250
--请求方式
get
--请求头
user-agent
cookies
爬取豆瓣电影信息
电影排名、电影名称、电影url、电影导演、导演主演、电影年份、电影类型、电影评分、电影简介、电影评论
1、分析电影详情页
第一页
https://movie.douban.com/top250?start=0&filter=
第二页
https://movie.douban.com/top250?start=25&filter=
第三页
https://movie.douban.com/top250?start=50&filter=
代码:
#爬虫三部曲 #1、发送请求 import requests import re 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>.*?导演: ''' 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 ) print(movie_list) return movie_list #3、保存数据 def save_data(movie): top, m_url, name, daoyan, actor, year_type, \ point, commit, desc = movie year_type=year_type.strip('\n') data=f''' =========欢迎观赏=========== 电影排名:{top} 电影名称:{name} 电影url:{m_url} 电影导演:{daoyan} 导演主演:{actor} 电影类型:{year_type} 电影评分:{point} 电影简介:{commit} 电影评论:{desc} =========欢迎再来=========== \n \n ''' print(data) with open('daoyan_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)
结果:
二selenium请求库
1、什么是selenium
期初是一个自动化测试工具,原理是驱动浏览器执行一些一定好的操作。爬虫本质上就是模拟浏览器,所以可以使用它来做爬虫。
2、为什么要使用selenium
优点:
--执行js代码
--不需要分析复杂的通信流程
--对浏览器做弹窗、下拉等操作
--*** 获取动态数据
--*** 破解登录验证
缺点:
--执行效率低
3、安装与使用
1、安装selenium请求库
pip3 install selenium
2、必须安装浏览器
“谷歌”或“火狐”
3、安装浏览器驱动
下载win32驱动
百度搜索动画关键字代码:
from selenium import webdriver # import time # # driver=webdriver.Chrome() # try: # time.sleep(10) # # finally: # driver.close() from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait import time driver=webdriver.Chrome() try: driver.get('https://www.baidu.com/') wait=WebDriverWait(driver,10) input_tag = wait.until(EC.presence_of_element_located( (By.ID, 'kw') )) time.sleep(5) input_tag.send_keys('动画') input_tag.send_keys(Keys.ENTER) time.sleep(20) finally: driver.close()
百度自动登录代码:
'''''' from selenium import webdriver# web驱动 from selenium.webdriver.common.keys import Keys# 键盘按键操作 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 # 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('TANG_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 pw=driver.find_element_by_name('password') pw.send_keys('***') submit=driver.find_element_by_class_name('pass-button-submit') submit.click() time.sleep(20) # end finally: # 关闭浏览器释放操作系统资源 driver.close()
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
#通过class类查找 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)