Python爬虫 Day 2

'''
爬取豆瓣电影信息
    电影排名、电影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()


猜你喜欢

转载自www.cnblogs.com/merliah/p/11119558.html
今日推荐