爬取豆瓣视频_top250+selenium基本使用
2019-07-02 21:20 tankyy 阅读(404) 评论(0) 编辑 收藏 举报爬取豆瓣视频_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=
'''
import requests import re
# 爬虫三部曲
# 1、发送请求
def get_page(url): response = requests.get(url) # print(response.text) return response
# 2、解析数据
''''''
'''
电影排名、电影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>
'''
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、保存数据
# 电影排名、电影url、电影名称、电影导演、电影主演
# 电影年份 / 电影类型、电影评分、电影评论、电影简介
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) for movie in movie_list: # print(movie) # 3.保存数据 save_data(movie)
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.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()