爬虫
python的爬虫操作
一、request
一会写
二、xpath
xpath中 [1] 就是第一个元素
代码 | 含义 |
---|---|
//a | 当前html页面中所有的a标签 |
//a/@href | 当前html页面中所有的a标签href属性(链接)的内容 |
//a/text() | 当前html页面中所有的a标签de文本内容 |
//img/@src | 所有的img标签中src内容 |
//img[@alt=’—‘]/@src | 所有的img标签中alt属性为—的src内容 |
//div[@class=’lst-item’][3]/a[last()]/img/@src | a选取页面中所有div标签下class为lst-item的第三个中最后一个a标签img标签中的src |
//a
当前html页面中所有的a标签
//a/@href
当前html页面中所有的a标签href属性(链接)的内容
//a/text()
当前html页面中所有的a标签de文本内容
//img/@src
所有的img标签中src内容
//img[@alt=’—‘]/@src
所有的img标签中alt属性为—的src内容
//div[@class=’lst-item’][3]/a[last()]/img/@src
a选取页面中所有div标签下class为lst-item的第三个中最后一个a标签img标签中的srctext()
文字
//a[contains(text(),’下一页’)]/@href
下一页地址
1 | from lxml import etree |
Tips:
不太会怎么办,那就直接去浏览器里的开发者模式复制xpath路径
三、selenium
基本操作代码示例
1 | from selenium import webdriver |
新版本selenium中,find_element语法有所变化
1 | from selenium.webdriver.common.by import By |
1 | #鼠标键盘包 |
实现拖拽操作
action = ActionChain(driver)
action.drag_and drop(first_tar,second_tar)
#从第一个位置拖拽到第二个位置
鼠标点击像素操作
ActionChain(driver).move_by_offset(200,300).click().perform()
ActionChain(driver).move_by_offset(-200,300).perform() #把鼠标移动回来
鼠标其他操作:
click() 单击鼠标左键
click_and_hold() 点击鼠标左键不放开
double_click() 双击鼠标左键
context_click() 单击鼠标右键
drag_and_drop_by_offset(first_tar,second_tar) 拖拽到某个位置松开
key_down(“—“) 按下一个键
move_to_element(ele) 移动到某个元素的位置
move_to_element_by_offset(ele,x,y) 移动到某个元素的相对位置
1.下拉框操作:
#先引入一个包
from selenium.webdriver.support.ui import Select
#使用Select包裹起来的xpath值找到下拉框元素
select1 = Select(driver.find_element_by_xpath(“//select[@class=’—‘]”))
#选择下拉框的值
select1.select_by_value(“—“)
2.新建标签页:
js = window.open(“baidu.com”)
driver.execut_script(js)
3.查看当前页面:
print(driver.current_url)
4.切换选项卡
driver.switch_to.window(driver.window_handles[1]) #切换到第二个标签页
5.弹窗处理:
driver.switch_to_alert.accept()
6.iframe处理:
#找到并进入iframe标签
ifra_div = driver.find_element_by_tag_name(“iframe”) #如果有多个iframe,就用elements
driver.switch_to.frame(ifra_div) #用[–]选取不同的iframe标签
#释放iframe,回到主页面
driver.switch_to_default_content()
7.获取标签下的文字:
get_attribute(‘innerText’)
8.cookie操作:
#查看cookie
cookie = driver.get_cookies()
print(cookie)
#增加cookie
driver.add_cookies({—})
#清除所有cookie
driver.delete_all_cookies()
9.滑动操作:
js = “document.documentElement.scrollTop=10000”
driver.execute_script(js)
10.截图操作:
#页面直接截图
driver.get_screenshot_as_file(“./picture.jpg”)
#base64加密截图
b = driver.get_screenshot_as_base64
print(b)
11.浏览器处理:
driver.back() 后退
driver.refresh() 刷新
driver.forword() 前进
12.最大化窗口:
driver.maximize_window()
13.超时操作:
#引入3个包
1 | from selenium.webdriver.support.ui import WebDriverWait |
#如果10s页面还没加载出来,就抛出一个异常,需要配合try来做
driver.set_pageload_timeout (10)
#隐性等待,全局查找页面元素的等待时间,如果这个时间没找到指定元素,就抛出异常(全局做一次就好)
driver.implicitly_wait(2)
#显性等待
使用频率最高的元素超时设置
WebDriverWait(driver,10).until(EC.presence_of_element_located(By.ID,’j-anime-nav’))
uti1用来检测指定的元素是否出现,如果在超时的时间内出现就返回选择器的信息,否则报TimeOutException
until_not用来检测指定的元素是否消失,如果在超时时间内消失返回True,否则报TimeOutException
14.反反selenium:
#某些网站会识别selenium
options.add_experimental_option(‘excludeswitches’,[‘enable-automation’])
15.图片不加载:
适用于只爬文字的爬虫,降低流量消耗,加快速度
1 | prefs = { |