''' 爬取豆瓣电影信息 电影排名、电影url、电影名称 电影导演、电影主演、电影年份/类型 电影评分、电影评论、电影简介 分析所有主页的url ''' import requests import re # 爬虫三部曲 # 1.发送请求 def get_page(url): response = requests.get(url) # print(response.text) return response # 2.解析数据 def parse_index(html): 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 = ''' ==========欢迎观赏========== 电影排名:{} 电影url:{} 电影名称:{} 电影导演:{} 电影主演:{} 电影类型:{} 电影评分:{} 电影评论:{} 电影简介:{} ==========下次再来========== \n \n '''.format(top,m_url,name,daoyan,actor,year_type,point,commit,desc) print(data) with open('douban_top250.txt','a',encoding='utf-8') as f: f.write(data) print('电影:{}写入成功...'.format(name)) if __name__ == '__main__': num = 0 for line in range(10): url = 'https://movie.douban.com/top250?start={}&filter='.format(num) 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.安装浏览器驱动
http://npm.taobao.org/mirrors/chromedriver/2.38/
from selenium import webdriver #web驱动 from selenium.webdriver import ActionChains # 破解滑动验证码的时候用的 可以拖动图片 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 # 方式一:通过驱动打开浏览器 driver = webdriver.Chrome(r'C:\Users\Merliah\Downloads/chromedriver.exe') # 方式二:把webdriver.exe驱动放到python解释器安装目录/Scripts文件夹中 # python解释器安装目录/Scripts配置环境变量 # python解释器安装目录 配置环境变量 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 driver = webdriver.Chrome() try: # 隐式等待:需要在get前调用 # 等待任意元素加载10秒 driver.implicitly_wait(10) driver.get('https://www.jd.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()