一、 爬取豆瓣电影top250
首先我们要知道我们需要爬取什么东西:
电影名称、电影url、电影导演、电影主演
电影年份、电影类型、电影评分、电影评论、电影简介
1、分析所有主页的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=
爬虫三部曲
1、发送请求
1 import requests 2 import re 3 def get_page(url): 4 response = requests.get(url) 5 return response
2、解析数据
要对电影的各种信息进行正则匹配规则:
电影名称、电影url、电影导演、电影主演,电影年份、电影类型、电影评分、电影评论、电影简介
#
.*?(.*?).*?.*?(.*?).*?(.*?)
# .*? 导演: (.*?)主演: (.*?)
(.*?).*? .*? (.*?)人评价.*? (.*?)
# .*? 导演: (.*?)主演: (.*?)
(.*?).*? .*? (.*?)人评价.*? (.*?)
解析函数为
1 def parse_index(html): 2 movie_list = re.findall('.*?(.*?).*?.*?(.*?).*? 导演: (.*?)主演: (.*?)
(.*?).*? .*? (.*?)人评价.*? (.*?)',html,re.S) 3 return movie_list3、保存数据
1 def save_data(movie): 2 top,m_url,name,daoyan,actor,year_type,point,commit,desc = movie 3 year_type=year_type.strip(' \n') 4 data = f''' 5 ==========欢迎观看========== 6 电影排名:{top} 7 电影名称:{m_url} 8 电影url:{name} 9 电影导演:{daoyan} 10 电影主演:{actor} 11 年份类型:{year_type} 12 电影评分:{point} 13 电影评论:{commit} 14 电影简介:{desc} 15 ============================ 16 \n 17 ''' 18 print(data) 19 with open('douban_top250.txt','a',encoding='utf-8') as f: 20 f.write(data) 21 print(f'电影:{name} 写入成功')主函数为:
1 if __name__ == '__main__': 2 #拼接所有主页 3 num = 0 4 for line in range(10): 5 url = f'https://movie.douban.com/top250?start={num}&filter=' 6 num+=25 7 print(url) 8 9 #往每个主页发送请求 10 index_res = get_page(url) 11 12 #解析主页获取电影信息 13 movie_list = parse_index(index_res.text) 14 15 for movie in movie_list: 16 # print(movie) 17 18 #3.保存数据 19 save_data(movie)
二、selenium的基本使用
1 from selenium import webdriver # 用来驱动浏览器的 2 # from selenium.webdriver import ActionChains # 破解滑动验证码的时候用的 可以拖动图片 3 from selenium.webdriver.common.by import By # 按照什么方式查找,By.ID,By.CSS_SELECTOR 4 from selenium.webdriver.common.keys import Keys # 键盘按键操作 5 from selenium.webdriver.support import expected_conditions as EC # 和下面WebDriverWait一起用的 6 from selenium.webdriver.support.wait import WebDriverWait # 等待页面加载某些元素 7 import time 8 9 # 方式一: 通过驱动打开浏览器 10 # driver = webdriver.Chrome(r'驱动的绝对路径/webdriver.exe') 11 12 # 方式二: 把webdriver.exe驱动放到 python解释器安装目录/Scripts文件夹中 13 # python解释器安装目录/Scripts配置环境变量 14 # python解释器安装目录 配置环境变量 15 driver = webdriver.Chrome(r'D:\编程\python\Scripts\chromedriver.exe') 16 try: 17 driver.get('https://www.jd.com/') 18 #获取显示等待对象10秒 19 #可以等待某个标签加载十秒 20 wait = WebDriverWait(driver,10) 21 22 #查找id为key 23 input_tag = wait.until(EC.presence_of_element_located( 24 (By.ID, 'key') 25 )) 26 time.sleep(5) 27 28 #在输入框内输入商品名称 29 input_tag.send_keys('公仔') 30 31 #按下键盘回车 32 input_tag.send_keys(Keys.ENTER) 33 34 time.sleep(20) 35 36 finally: 37 #关闭浏览器释放操作系统资源 38 driver.close()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() 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()
转载于:https://www.cnblogs.com/tanknb/p/11123359.html