千锋教育python数据分析教程200集,Python数据分析师入门必备视频

爬虫流程梳理
import requests from bs4 import BeautifulSoup # 指定url url 来源 网址栏 数据中解析获取 # 发请求 接响应 response = requests.get(url) # 获取的内容 响应状态码 文本数据 字节数据 编码 内容 服务器响应的编码 # 判断响应是否成功 if response.status_code == 200: # 获取响应数据 # 如果是对 图片连接 视频链接 音频链接发请求 响应的数据字节数据 response.content 保存 # 文本数据 data = response.text # 解析数据 数据 加载进美丽的汤 data_html = BeautifulSoup(文本数据data,解析器'html.parser') # 获取数据 select(css选择器语法) select_one id #属性值 class .属性值 标签名 包含 > 空格 其他属性选择器 选择器[属性名=值] 结构选择器 :first-child :last-child :nth-child(2) # 获取标签之间的文本数据 标签.text # 获取标签的属性值 标签.attrs.get(属性名) else: 响应失败
python操作excel
使用的python中的模块 import openpyxl excel 组成 工作簿 一个工作簿中可以有多张工作表 自带一张工作表 Sheet 工作表 包含多个单元格 行列确定某个单元格
selenium的使用
需要一个模块 import selenium
驱动浏览器打开页面
相对于requests的优点 不管数据是否是静态的还是动态 只要页面上有 就能获取
打开浏览器
from selenium import webdriver # 浏览器的初始化 browser = webdriver.Chrome() # 发送请求 browser.get('https://www.baidu.com/') # 打印页面的标题 print(browser.title) # 退出模拟浏览器 browser.quit() # 一定要退出!不退出会有残留进程
无界面模式
from selenium import webdriver # 1. 实例化配置对象 chrome_options = webdriver.ChromeOptions() # 2. 配置对象添加开启无界面命令 chrome_options.add_argument('--headless') # 3. 配置对象添加禁用gpu命令 chrome_options.add_argument('--disable-gpu') # 4. 实例化带有配置对象的browser 对象 browser = webdriver.Chrome(chrome_options=chrome_options) browser.get('https://www.baidu.com/') # 查看请求的数据 print(browser.page_source) # 查看渲染后的数据,就可以Xpath进行解析获取数据了 print(browser.get_cookies()) # 查看请求页面后的cookies值 print(browser.current_url) # 查看请求url # 关闭页面 browser.close() # 关闭浏览器 browser.quit()
元素定位
from selenium import webdriver from selenium.webdriver.common.by import By chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') browser = webdriver.Chrome(chrome_options=chrome_options) url = 'https://www.xxx.com/' browser.get(url) html_str = browser.page_source from selenium.webdriver.common.by import By # 获取第一个元素 browser.find_element(by=By.ID, value="list-1") # 获取多个元素 browser.find_elements(by=By.ID, value="list-1")
元素操作
ret = browser.find_element_by_class_name('element').text print(ret[0].text) ret = browser.find_element_by_tag_name('a').get_attribute('href') print(ret[0].get_attribute('href'))
前进后退
# 前进 browser.forward() # 后退 browser.back()
执行js
from selenium import webdriver browser = webdriver.Chrome() url = 'https://www.baidu.com/' browser.get(url) js = 'window.scrol1To(O,document.body.scrollHeight)' # js语句 browser.execute_script(js) # 执行js的方法 browser.quit()
页面等待
- 隐式等待
隐式等待针对的是元素定位,隐式等待设置了一个时间,在一段时间内判断元素是否定位成功,如果完成了,就进行下一步。在设置的时间内没有定位成功,则会报超时加载 from selenium import webdriver driver = webdriver.Chrome() driver.implicitly_wait(10) # 隐式等待10秒 driver.get('https://www.baidu.com/') myDynamicElement = driver.find_element_by_id("input")
- 显示等待
显式确定等待指定某个元素,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常了。 from selenium import webdriver from selenium.webdriver.common.by import By # WebDriverWait 库,负责循环等待 from selenium.webdriver.support.ui import WebDriverWait # expected_conditions 类,负责条件出发 from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get('https://www.baidu.com/') try: # 页面一直循环,直到 id="input" 出现 element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "input")) ) finally: driver.quit()
使用代理IP
from selenium import webdriver import time # 1. 实例化配置对象 options = webdriver.ChromeOptions() # 2. 配置对象添加使用代理ip的命令 options.add_argument('--proxy-server=http://ip地址') # 代理IP:端口号 # 3. 实例化带有配置对象的driver对象 driver = webdriver.Chrome(chrome_options=options) driver.get("https://www.baidu.com") # 获取页面内容 print(driver.page_source) # 延迟3秒后关闭当前窗口,如果是最后一个窗口则退出 time.sleep(3) driver.close()
修改请求头
用于伪装请求头 from selenium import webdriver import time agent = 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1' # 1. 实例化配置对象 options = webdriver.ChromeOptions() # 2. 配置对象修改请求头 options.add_argument('--user-agent=' + agent) # 3. 实例化带有配置对象的driver对象 driver = webdriver.Chrome(chrome_options=options) driver.get("https://www.baidu.com") # 获取页面内容 print(driver.page_source) # 延迟3秒后关闭当前窗口,如果是最后一个窗口则退出 time.sleep(3) driver.close()