爬虫
requests 模块
获取数据方式
静态页面
import requests
response=requests.get(url="https://www.baidu.com")
print(response.text)
动态加载数据
豆瓣动画电影排行榜
import requests
import json
url='https://movie.douban.com/j/chart/top_list'
params={'type':25,'interval_id':'100:90','action':'','start':0,'limit':169}
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.81'}
response=requests.get(url=url,params=params,headers=headers)
content=response.json()
tot=0
for s in content:
    print(s['title'],s['score'])
    tot+=1
    if tot==5:
        break
图片
百度图片
import requests
url="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png"
response=requests.get(url=url)
#提取图片的二进制字节码
content=response.content
#将二进制字节码写入文件
with open ('baidu.png','wb') as fp:
    fp.write(content)
get()函数
参数介绍
headers 请求头
headers={'User-Agent':'Mozilla/5.0 (Linux; Android 9; SM-G960F) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36 MicroMessenger/7.0.10.1580(0x27000A53 NetType/WIFI Language/zh_CN'}
params 动态参数
timeout 请求超时的时间(s)
timeout=1.0
proxies 代理服务器
proxies={'https':101.123.102.12:7999}
verify参数 绕过SSL证书认证。
现在很多网站要求使用HTTPS协议,但有些网站没有设置好HTTPS证书或者其证书不被CA机构认可,就会出现SSL证书错误的提示。
为了让我们的爬虫进行下去,我们设置verify = False 来取消证书验证。
post()函数
Re正则表达式
普通字符表

元字符表

re模块
findall() 提取满足正则表达式的所有字符串 []
search() 匹配第一个满足正则表达式的字符串,用group()取值
match() 从开头匹配的search()
finditer() 返回迭代器的findall()
BeatifulSoup模块
定位方式
1.标签名
返回第一个p标签
soup.p 
2.标签属性
soup.find(class_='')
soup.find_all(id='')
3.标签名+标签属性
soup.find('div',class_='')
4.选择器
返回所有符合条件的标签
(1) id选择器
soup.select('#id_name')
(2) class选择器
soup.select('.class_name')
(3) 标签选择器
soup.select('li')
(4) 层级选择器
>表示向下找一个层级,中间不能有其他层级
空格表示中间可以有多个层级
soup.select('div>ul>#id_name')
soup.select('div>ul>li')
soup.select('div li')
提取文本和属性
string属性返回直系文本
soup.select('.class_name')[1].string
text属性返回所有文本
soup.select('.class_name')[1].string
字典取值提取标签属性
soup.select('.class_name')['class']
Xpath表达式
html=etree.parse('text.html')
html=etree.HTML(response.text)
定位标签
(1)标签名定位
(2)索引定位
(3)属性定位
html.xpath('//*[@class='class_name']')
//表示多层级,*表示任意标签
(4)逻辑运算定位
提取文本内容和属性
/text() 直系文本内容
//text() 所有文本内容
/@属性名 指定属性值
数据清洗
1.异常值处理
替换为空值后删除
data['price'][data['price']>1000=None
data.dropna()
或替换为空值后进行数据插补
data['price'][data['price']>1000=None
data.fillna(data.mean())\
乱码处理
从网页源码查看<meta>标签的charset属性编码格式
或response.encoding=response.apparent_encoding
Selenium模块
from selenium import webdriver
browser=webdriver.Edge(executable_path='msedgedriver.exe')
browser.get('url')
常用函数或属性
| 函数 | 功能 | 
|---|---|
| browser.maximize_window() | 浏览器窗口最大化 | 
| browser.get_cookies() | 获取cookies | 
| browser.refresh() | 刷新 | 
| browser.quit() | 关闭所有网页并退出驱动程序 | 
| browser.close() | 关闭当前网页 | 
| browser.back() | 返回上一页 | 
| 属性 | 功能 | 
|---|---|
| browser.name | 驱动程序名称 | 
| browser.title | 网页标题 | 
| browser.page_source | 网页源代码 | 
| browser.current_window_handle | 获取当前网页窗口 | 
| browser.window_handles | 获取当前打开的所有网页窗口 | 
标签定位
| 定位方式 | 函数element(s) | 
|---|---|
| id | find_element_by_id(id_name) | 
| name | find_element_by_name(name) | 
| class | find_element_by_class(class_name) | 
| 标签名称 | find_element_by_tag_name() | 
| 链接文本精确定位 | find_element_by_link_text | 
| 链接文本模糊定位 | find_element_by_partial_link_text | 
| css | find_element_by_css_selector | 
| xpath | find_element_by_xpath | 
标签操作
| 函数 | 属性 | 
|---|---|
| get_attribute() | text | 
| tag_name() | size | 
| is_selected() | location | 
| is_dispalyed() | |
| is_enabled() | |
| send_keys | 对标签赋值 | 
| click() | 
模拟鼠标操作
from selenium import webdriver
from selenium.webdriver import ActionChains
import time
browser=webdriver.Edge(executable_path='msedgedriver.exe')
browser.get('https://www.taobao.com')
search_button=browser.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button')
actions=ActionChains(browser)
#鼠标单击
actions.click(search_button).perform()
#鼠标双击
actions.double_click(search_button).perform()
#鼠标右键单击
actions.context_click(search_button).perform()
#鼠标长按
actions.click_and_hold(search_button).perform()
time.sleep(5)
actions.release(search_button).perform()
#鼠标拖动
actions.drag_and_drop()
#鼠标拖动,给出水平和垂直的位移值,常用于拖动滑块验证
actions.drag_and_drop_by_offset()
#鼠标移动
actions.move_by_offset()
actions.move_to_element()
<iFrame>处理
嵌套在一个网页中的另一个网页
显式等待
当指定条件成立时再进行下一步操作,如果条件一直不成立就一直等待,直到等待时间达到了设定的超时时间才会报错
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
import time
browser=webdriver.Edge(executable_path='msedgedriver.exe')
browser.get('https://www.taobao.com')
#until()函数在等待期间会每隔一段时间就判断元素是否存在,直到返回值不是False,如果超时则报错
element=WebDriverWait(driver=browser,timeout=10).until(EC.presence_of_element_located((By.ID,'q')))
#until_not()函数在等待期间会每隔一段时间就判断元素是否存在,直到返回值是False,如果超时则报错
element=WebDriverWait(driver=browser,timeout=10).until_not(EC.presence_of_element_located((By.ID,'w')))
隐式等待
在实例化浏览器的WebDriver对象时,为该对象设置一个超时时间,在操作该对象时,代码遇到元素未加载完毕或不存在时,会在规定的超时时间不断地刷新页面来寻找该元素,直到找到该元素,如果超过超时时间还是找不到该元素,则会报错。
仅适用于元素缺少的情况
隐式等待的作用是全局的,是作用于整个 session 的生命周期,也就是说只要设置一次隐式等待,后面就不需要设置。如果再次设置隐式等待,那么后一次的会覆盖前一次的效果。
IP反爬
cookie池模拟登录
requests模块get()函数,headers直接携带cookie
import requests
url='http://card.cqu.edu.cn/User/User'
cookie='Hm_lvt_fbbe8c393836a313e189554e91805a69=1695035025,1695083340,1695090104,1695102226; ASP.NET_SessionId=f5lgsxc003ae2tzwezxfmd2o; hallticket=7438A8ECFC6848668164DC892D33A719'
headers={'Cookie':cookie,'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.36'}
response=requests.get(url=url,headers=headers).text
print(response)
cookie存为字典,get()cookies携带

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号