Python爬虫知识总结
Python爬虫总结
爬虫可分为通用爬虫(搜索引擎)、聚焦爬虫(特定网页)、增量式爬虫(只爬更新的内容)等,本文主要总结聚焦爬虫的知识。
爬虫的作用:用来获取数据量大,获取方式相同的网页数据,代替手工获取。
爬虫的步骤:抓取网页→数据存储→预处理→操作数据,实现需求。
Requests:最常用的python http库
GET请求:response = requests.get(url,headers=headers)
POST请求:response = requests.post(url, data = data, headers=headers)
# data的形式:字典
response的常用方法:
response.text 获取str 类型的响应
response.content 获取bytes 类型的响应
response.status_code 获取状态码
response.headers 获取响应头
response.request 获取响应对应的请求
Cookies 和 session
本质上都是基于键值对的字符串
两者区别:
cookie数据存放在客户的浏览器上,session数据放在服务器上 cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗(使用用户的cookies 获取相关信息 session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
利弊:
带上cookie、session的好处:很多网站必须登录之后(或者获取某种权限之后)才能能够请求到相关数据
带上cookie、session的弊端:一套cookie和session往往和一个用户对应.请求太快,请求次数 太多,容易被服务器识别为爬虫。从而是账号收到损害
使用建议 1.不需要cookie的时候尽量不去使用cookie 2.为了获取登录之后的页面,我们必须发 送带有cookies的请求,此时为了确保账号安全应该尽量降低数据采集速度
使用IP代理爬虫
IP代理既代理服务器,其功能主要就是代理网络用户去获取网络信息,形象的说就是网络信息的中转站为什么爬虫需要使用代理?
1.让目标服务器以为不是同一个客户端在请求,放置因为ip发送请求过多而被反爬
2.防止我们的真实地址被泄露,防止被追究
使用免费代理网站,比如http://www.ip3366.net/ 找到代理ip和端口下面是使用代理的示例代码:
import requests
# 使用代理
url = 'http://www.baidu.com/'
# 免费代理
proxies= {
'http':'http://115.207.212.128:8060',
'https':'http://115.207.212.128:61234'
}
response = requests.get(url,proxies=proxies)
print(response.text)
数据提取
JSON
数据分类
1. 非结构化数据: html , 文本等 处理方法:正则表达式,xpath语法
2. 结构化数据:json,xml等 处理方法:转换为python数据类型
为什么要使用JSON?
把json格式字符串转化为python字典类型很简单,所以爬虫中,如果我们能够找到返回json数据格 式字符串的url,就会尽量使用这种url 如何找到返回json的url呢? 1、使用浏览器/抓包工具进行分 析 wireshark(windows/linux),tcpdump(linux) 2、抓包手机app的软件
正则
常用匹配方法:match()从字符串起始位置匹配正则表达式,如果匹配,就返回匹配成功结果如果不匹配,就返回None。compile()将正则字符串编译成正则表达式对象以便复用也可以传入修饰符 例如re.S 相当于做了一层封装、search()匹配整个字符串返回第一个成功匹配的结果 匹配失败 返回None match() 从字符串起始 位置匹配正则表达式
修饰符:re.I 使匹配对大小写不敏感 re.L 做本地化识别(locale-aware)匹配 re.M 多行匹配 ,影响^和$ re.S 使.匹配包括换行符在内的所有字符 re.U 根据Unicode字符集解析字符影响 \w \W \b \B。网页匹配常用re.S re.L
转义匹配:遇到正则匹配模式的特殊字符 在前面加反斜杠转义
贪婪与非贪婪:贪婪匹配下,. 会尽可能多的匹配字符 使用.?拒绝贪婪模式尽可能少匹配字符
XPath
全称 XML Path Language 是一门在XML文档中 查找信息的语言 最初是用来搜寻XML文档的 但是 它同样适用于HTML文档的搜索
XPath的选择功能十分强大,它提供了非常简洁的路径选择表达式,另外还提供了超过100个内置函数,用于字符串,数值,时间的匹配 以及节点和序列的处理
常用节点选择工具 Chrome插件 XPath Helper
规则:
一般会用//开头的XPath规则来选取所有符合要求的节点
*代表匹配所有节点 返回一个列表 每个元素是Element类型其后是节点名
通过/或者// 查找元素子节点或子孙节点
用XPath中text()方法获取节点中的文本
获取li节点下所有a节点的href属性:result = html.xpath('//li/a/@href')
属性过滤:选取class为item-0 的li节点:result = html.xpath('//li[@class="item-0"]')
有时候某个节点的某个属性有多个值,用[contains(@xxx, ‘’)]
多属性匹配用and连接
等等
Selenium
selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,例如 点击 下拉等操 作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见既可爬。对于一些js动态渲染的页 面来说,此种爬取方式非常有效。
模拟拖动滚动条:driver.execute_script(“window.scrollTo(0,1000)”)
反爬虫技术
封IP:当某一个IP访问量特别特别大,服务器则会封杀这个IP
措施:使用代理IP
验证码验证:在需要登陆的页面比较常见
措施:可以使用图像识别技术(简单)或者破解验证码付费Web服务(困难)
javascript渲染:网页开发者将重要信息放在网页中但不写入html标签中,而浏览器会自动渲染<script>标签中的js代码将信息展现在浏览器当中,而爬虫是不具备执行js代码的能力,所以无法将js事件产生的信息读取出来
使用加密算法:使用多个不同的字体文件,然后约定使用指定字体文件方式,比如时间戳取模,这样每次爬取到的数据映射方式都不一样,映射结果就不一样,极大提高了破解的难度分析加密算法
措施:分析加密算法,然后构造

浙公网安备 33010602011771号