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事件产生的信息读取出来

使用加密算法:使用多个不同的字体文件,然后约定使用指定字体文件方式,比如时间戳取模,这样每次爬取到的数据映射方式都不一样,映射结果就不一样,极大提高了破解的难度分析加密算法

措施:分析加密算法,然后构造

posted @ 2020-01-02 15:29  菜鸟小远  阅读(1041)  评论(0)    收藏  举报