Day02 爬取豆瓣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=

爬虫三部曲

1、发送请求

1 import requests
2 import re
3 def get_page(url):
4     response = requests.get(url)
5     return response

2、解析数据

要对电影的各种信息进行正则匹配规则:

电影名称、电影url、电影导演、电影主演,电影年份、电影类型、电影评分、电影评论、电影简介

# <div class="item">.*?<em class="">(.*?)</em>.*?<a href="(.*?)">.*?<span class="title">(.*?)</span>.*?<span class="title">(.*?)</span>
# .*? 导演: (.*?)主演: (.*?)<br>(.*?)</p>.*?<span class="rating_num"
# .*?>(.*?)</span>.*? <span>(.*?)人评价</span>.*? <span class="inq">(.*?)</span>

解析函数为

扫描二维码关注公众号,回复: 6706555 查看本文章
1 def parse_index(html):
2     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)
3     return movie_list

3、保存数据

 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()

猜你喜欢

转载自www.cnblogs.com/tanknb/p/11123359.html