一、 requests请求库爬取豆瓣电影信息
— 请求url
http://movie.douban.com/top250
— 请求方式
GET
— 请求头
user-agent
cookies
老样子,通过谷歌浏览器在top250页面检查,找到我们要的信息。
通过三步,完成整个过程:
附上完整代码:
""" 爬取豆瓣电影信息: """ """ 第一页url: https://movie.douban.com/top250?start=0&filter= 第二页url: https://movie.douban.com/top250?start=25&filter= """ import requests import re # 1 发送请求 def get_page(url): response = requests.get(url) return response # 2 解析数据 def parse_index(html): ''' 电影排名,电影url,电影名称,电影导演,电影主演, 电影年份/类型,电影评分,电影评论,电影简介 <div class="item">.*?<em class="">(.*?).*?<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): 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) print(movie_list) # 3 保存数据 for movie in movie_list: save_data(movie)
二、 selenium请求库
1 什么是selenium?
期初是一个自动化测试工具,原理是驱动浏览器执行一些预定好的操作。
爬虫本质上就是模拟浏览器,所以可以使用它来做爬虫。
2.为什么要使用selenium?
优点:
— 执行js代码
— 不需要分析复杂的通信流程
— 对浏览器做弹窗、下拉等操作
— ***** 获取动态数据
— *** 破解登录验证
缺点:
— 执行效率低
3. 安装和使用
1)安装selenium请求库:
pip3 install selenium
2) 必须安装浏览器
谷歌或者火狐
3) 安装浏览器驱动
http://npm.taobao.org/mirrors/chromedriver/2.38/
windows:
下载win32驱动
selenium的基本使用:
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 # 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()