爬虫笔记

request库

Requests是一常用的http请求库,它使用python语言编写,可以方便地发送http请求,以及方便地处理响应结果。

发送get/post请求

导入库

import requests

get请求

不带参数
r = requests.get('https://www.douban.com/') # 豆瓣首页
带一个以字典形式的参数params
r = requests.get('https://www.douban.com/search', params={'q': 'python', 'cat': '1001'})

post请求

不带参数
r = requests.post('https://www.douban.com/') # 豆瓣首页
带一个以字典形式的参数data
r = requests.post('https://www.douban.com/search', data={'q': 'python', 'cat': '1001'})

返回值

status_code = r.status_code # 响应值
content = r.text # 响应页面文本,str格式
content = r.content # 响应页面文本,byte格式
r.encoding = "utf-8" # 设置响应文本编码

selenium库

爬虫model

# coding:utf-8
from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions

option = ChromeOptions()
# option.add_argument('--headless')
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = Chrome(options=option)
driver.implicitly_wait(1)

url_1 = "xxx"
driver.get(url_1)
time.sleep(1)

强制/显示/隐式等待

强制

import time
time.sleep(3)

显示

from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 设置元素等待实例,最多等10秒,每0.5秒查看条件是否成立
element = WebDriverWait(driver, 10, 0.5).until(
# 条件:直到元素加载完成
EC.presence_of_element_located((By.ID, "kw"))
)

隐式

driver.implicitly_wait(1)

浏览器窗口最大化

driver.maximize_window()

.text 无法获取文本解决情况

.get_attribute(“innerHTML”) 代替 .text 获得不可见元素

爬虫无法定位元素可能原因是iframe

进入iframe

driver.switch_to.frame(driver.find_element('xpath','//iframe[@src="https://www.btapac.konicaminolta.com/download/driver_PBCN-CN.html"]'))

爬虫点击方法,稳定程度依次提升

  • ```python
    element = driver.find_element_by_xpath(“表达式”)
    element.click()


    - ```python
    element = driver.find_element_by_xpath("表达式")
    driver.execute_script("arguments[0].click();", element)
    • element = driver.find_element_by_xpath('表达式')
      webdriver.ActionChains(driver).move_to_element(element ).click(element ).perform()
      

文件上传

  • input标签节点,直接send_keys 文件路径即可