基于selenium实现爬虫

  • 爬虫:requests bs4靓汤 抓包(ajax) selenium

使用selenium模拟用户实现异步请求网络数据爬取!!!很清楚哇!!!

  1. 数据抓包常用方式:谷歌浏览器调试模式–>network—>选择xhr(异步请求的接口)–>查看对应接口的response响应数据

  2. selenium

    • 自动化爬虫(模拟器):模拟用户的行为(浏览器请求网址获取网页内容的行为)

    • 安装: pip(conda) install selenium

    • 浏览器驱动:chromedriver.exe

      http://chromedriver.storage.googleapis.com/index.html

      要根据当前浏览器的版本选择对应或者相近的驱动版本

    • 将下载的chromedriver.exe驱动直接复制到python环境的scripts目录中

  3. selenium简单使用

    from selenium import webdriver
    
    
    #1. 获取浏览器对象
    # webdriver.Chrome(executable_path='chromedriver.exe')#没有导入驱动,就以相对路径的方式引入
    browser = webdriver.Chrome()#将驱动导入到了scripts目录中
    #2. 请求url
    url = "https://www.baidu.com"
    #3. 窗口最大化
    browser.maximize_window()
    browser.get(url)
    
  4. selenium模拟用户行为豆瓣搜索

    from selenium import webdriver
    
    
    #1. 浏览器
    browser = webdriver.Chrome()
    url = "https://movie.douban.com/top250"
    browser.maximize_window()
    browser.get(url)
    #2. 获取网页源码
    # print(browser.page_source)
    #3. 查找搜索框并赋值
    #   send_keys:给输入框赋值
    browser.find_element_by_css_selector("#inp-query").send_keys("逐梦演艺圈")
    #4. 查找搜索按钮并点击
    browser.find_element_by_css_selector("#db-nav-movie > div.nav-wrap > div > div.nav-search > form > fieldset > div.inp-btn").click()
    #5. 清空输入框内容
    #  clear:清空输入框内容
    browser.find_element_by_css_selector("#inp-query").clear()
    #6. 查找搜索框并赋值
    #   send_keys:给输入框赋值
    browser.find_element_by_css_selector("#inp-query").send_keys("周润发")
    #7. 查找搜索按钮并点击
    browser.find_element_by_css_selector("#db-nav-movie > div.nav-wrap > div > div.nav-search > form > fieldset > div.inp-btn").click()
    
  5. selenium自动翻页抓取京东数据

    from selenium import webdriver
    import time
    import csv
    
    #1. 浏览器
    browser = webdriver.Chrome()
    url = "https://www.jd.com/"
    browser.maximize_window()
    #2. 请求
    browser.get(url)
    #3. 搜索框输入内容并搜索
    browser.find_element_by_css_selector("#key").send_keys("男士衣服")
    browser.find_element_by_css_selector("#search > div > div.form > button").click()
    time.sleep(2)#睡2秒,根据自己网络状况设置等待时间
    #4. 下一页按钮可以被点击时:class="pn-next"
    #  下一页按钮不可以被点击时:class="pn-next disabled"
    #5. 循环翻页抓取数据   for   while
    #   循环结束的条件:到最后一页,不能被继续翻页
    #   判断源码中是否存在pn-next disabled字符串内容,如果存在,表示到了最后一页,不能翻页
    i = 1#控制页数
    j = 1#控制条数
    while(True):
        # 6. 搜索所有商品的li   var   let const
        li_list = browser.find_elements_by_css_selector("#J_goodsList > ul > li")
        # 7. 遍历所有li
        for li in li_list:
            # 8. 价格
            #  标签.text:获取标签内部的文本内容
            price = li.find_element_by_css_selector("div > div.p-price > strong > i").text
            # 9.标题
            title = li.find_element_by_css_selector("div > div.p-name.p-name-type-2 > a > em").text
            # 10.店铺  标签.get_attribute(属性名)  :  获取标签的属性值
            store = li.find_element_by_css_selector("div > div.p-shop > span > a").get_attribute("title")
            # 11. 写入到csv文件
            with open("男士衣服.csv", "a", encoding="utf-8", newline='') as file:
                csv.writer(file).writerow([price, title, store])
            print("第{}页第{}条下载完成".format(i,j))
            j += 1
        if browser.page_source.find("pn-next disabled") == -1:
            #12. 开始翻页
            browser.find_element_by_class_name("pn-next").click()
            i+=1
            time.sleep(2)#翻页之后等待
        else:
            break
    
  6. 拉勾网爬虫分析

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    browser.maximize_window()
    browser.get("https://www.lagou.com/")
    #1. 定位选全国
    browser.find_element_by_css_selector("#changeCityBox > p.checkTips > a").click()
    #2. 输入内容并搜索
    browser.find_element_by_css_selector("#search_input").send_keys("数据分析")
    browser.find_element_by_css_selector("#search_button").click()
    #3. 给也不要
    browser.find_element_by_css_selector("body > div.body-container.showData > div > div.body-btn").click()
    

你可能感兴趣的:(Python,python,selenium,chrome)