爬取豆瓣视频_top250+selenium基本使用

爬取豆瓣视频_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()

猜你喜欢

转载自www.cnblogs.com/tankyy/p/11123223.html