210305课 1st爬虫重点总结
1, requests库
~ get / post / …
- url
- params —> 查询参数(URL参数) —> 跟在URL问号后面的参数
- data —> post请求发给服务器的数据 —> {‘参数名’: ‘参数值’}
- headers —> HTTP请求头 —> User-Agent / Cookie / Accept
- proxies —> 设置代理服务器 —> HTTP / SOCKS
- files —> 上传文件(post请求)
- verify —> HTTPS证书验证(True/False)
- timeout —> 请求超时时间
~ Session对象 —> get() / post()
~ Response对象
- text / content / json()
- cookies —> 服务器向浏览器写的临时数据
- status_code —> 响应状态码
import requests
session = requests.Session()
session.headers = {
'User-Agent': 'pass'
}
resp = session.get('pass')
print(resp.cookies)
# 如果上一个请求服务器反回了Cookie数据,
# 下一次请求时session对象会维持临时状态
2, 页面解析
-
~ 正则表达式解析 —> re —> compile / search / match / findall / finditer
-
CSS选择器解析 —> beautifulsoup4 / pyquery —> BeautifulSoup
—> select() / select_one() —> text / attrs[’…’]
- 标签选择器、属性选择器、类选择器、ID选择器
- 各种选择器的组合(父子、后代、兄弟)
- 伪类/伪元素 - XPath解析 —> lxml
# pyquery的使用方法
from pyquery import PyQuery
pq = PyQuery(url='https://image.so.com/')
pq = pq('div.list-mod.list-mod-0 >div >ul >li >a')
for anchor in pq.items():
print(anchor.attr('href'), anchor.text())
3, Selenium 爬取动态页面
-
~ chromedriver无头模式 —> PATH —> 放在虚拟环境中或者Python解释器中
- browser = webdriver.Chrome(options) —> ChromeOptions
- 加载页面:browser.get(’…’)
-
隐式等待或者显示等待
- browser.implicitly_wait(10)
- WebDriverWait(browser, 10) —> until —> 期望条件 -
获取页面元素(标签):—> 可以获取动态内容
- page_source —> 带动态内容的HTML页面 —> 正则表达式解析
- find_element_by_css_selector(’…’) —> WebElement-
~ send_keys():模拟输入
- click():模拟点击
- text:获取标签中的内容
- get_attribute(’…’):获取标签指定属性
- location:获取标签在浏览器窗口中的位置
- size:获取标签的宽度和高度
-
is_displayed():判断元素是否可见(不可见的a标签很有可能是蜜罐链接,诱使爬虫去访问的)
- find_element_by_xpath(’…’) —> XPath语法不会写也是在浏览器开发者工具中直接拷贝
- find_elements_by_css_selector(’…’) —> [WebElement, …]
- find_elements_by_xpath(’…’)
- 关闭浏览器对象 —> browser.close()
-
switch_to属性 —> 切换浏览器窗口 —> window() / frame()
- browser.switch_to.window(browser.window_handles[2])