1.爬虫入门
来源:互联网 发布:黑莓解网络锁软件 编辑:程序博客网 时间:2024/05/29 08:03
1.什么是爬虫? 请求网站并提取数据的自动化程序
2.爬虫的基本流程
(1)发起请求:通过HTTP库向目标站点发起请求,即发送一个Reques,请求可以(headers等信息
(2)获取响应内容:如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型
(3)解析内容:得到的内容可能是HTML,可以用正则表达式,网页解析库进行解析,可能是二进制数据,可以做保存或者进一步的处理
(4)保存数据:保存形式多样,可以作为文本,也可以保存至数据库,或者保存特定格式的文件。
3.什么是Request与Response?
Request包含什么?
(1)请求方式:主要有GET,POST两种类型,另外还有HEAD,PUT,DELETE,OPTIONS等
(2)请求URL:全称统一资源定位符,如一个网页文档,一张图片,一个视频等都可以用URL唯一来确定
(3)请求头:包含请求的头部信息,如User-Agent,Host,Cookies等信息
(4)请求体 :请求额外携带的数据如表单提交时的表单数据
Response包含什么?
(1)响应状态:有多种响应状态,如200代表成功,301跳转。404找不到页面,502服务器错误
(2)响应头:如内容类型,内容长度,服务器信息。设置Xookie等等
(3)响应体:最主要的部分,包含了请求资源的内容,如网页HTML,图片,二进制数据等
4.能抓怎样的数据?
(1)网页文本 :如HTML文档,json格式文本等
(2)图片:获取到的是二进制文件,保存为图片格式
(3)视频:同为二进制文件,保存为视频格式即可
(4) 其他:只要是能请求到的,都能获取
5.解析方式
(1)直接处理
(2)Json解析
(3)正则表达式
(4)BeautifulSoup
(5)PyqUERY
(6)XPath
6.怎样解决JavaScript渲染问题?
分析Ajax请求
Selenium/WebDriver
Splash
PyV8,Ghost.py
7.怎样保存数据
文本:纯文本,Json,Xml等
关系型数据库:如MySQL,Oracle,SQL Server等具有结构化表结构形式存储
非关系型数据库:如MongoDB,Redis等Key-Value形式存储
二进制文件:如图片,视频,音频等直接保存成特定格式即可
8.Urllib
Python内置的HTTP请求库
Urllib.request 请求模块
Urllib.error 异常处理模块
Urllib.parse url解析模块
Urllib.robotparser robots.txt解析模块
(1)Urlopen
get类型请求
import urllib.request
print(response.read().decode('utf-8'))
post类型请求
import urllib.request
data = bytes(urllib.parse.urlencode({'word':'hello'}),encoding='utf8')
response =urllib.request.urlopen('http://httpbin.org/post',data=data)
python编码encode和decode
计算机里面,编码方法有很多种,英文的一般用ascii,而中文有unicode,utf-8,gbk,utf-16等等。
unicode是 utf-8,gbk,utf-16这些的父编码,这些子编码都能转换成unicode编码,然后转化成子编码,例如utf8可以转成unicode,再转gbk,但不能直接从utf8转gbk
所以,python中就有两个方法用来解码(decode)与编码(encode),解码是子编码转unicode,编码就是unicode转子编码
设置超时时间
响应类型
状态码,响应头
Request
(和之前的urlopen+URL效果相同)
代理
( 伪装IP地址)
当你获取一个URL你使用一个opener。在前面,我们都是使用的默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout。
如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie的设置。
Cookie
(获取cookie保存到变量)
(保存cookie到文件)
1.importurllib.request
2.importhttp.cookiejar
3.filename ='cookie.txt'
4.cookie = http.cookiejar.MozillaCookieJar(filename)
5.hander = urllib.request.HTTPCookieProcessor(cookie)
6.opener = urllib.request.build_opener(hander)
7.response = opener.open('http://www.baidu.com')
8.cookie.save(ignore_discard=True,ignore_expires=True)
第三行设置保存cookie的文件,同级目录下的cookie.txt
第四行声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
第五行利用HTTPCookieProcessor对象来创建cookie处理器
第六行通过hander来构建opener
第七行创建一个请求,原理同urlopen
第八行save方法的两个参数,ignore_discard的意思是即使cookies将被丢弃也将它保存下来,ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原文件写入,在这里,我们将这两个全部设置为True。运行之后,cookies将被保存到cookie.txt文件中
(从文件中获取cookie并访问)
(2)异常处理
异常分两类: urlerror(只有reason属性)和HTTPError(有code,reason,headers属性)
Python编码中try语法是用来捕获由Python或程序本身引发的异常,如果不想在异常发生时结束程序,只需在try里捕获它
(3)url解析模块
Urlparse
Urlunparse
Urljoin
Urlencode
9.Requests库
(1)请求
基本GET请求
带参数的GET请求
解析json
获取二进制数据
(获取)
(保存)
添加headers
(直接访问无响应)
(添加headers后有响应)
(2)基本POST请求
(带headers的POST请求 )
(3)响应
reponse属性
状态码判断
(4)高级操作
文件上传
获取cookie
会话维持
获取不到,是因为两个get像在两个浏览器访问,第一个set不影响第二个get
通过Session维持登陆会话
证书验证
对于HTTPS的网站,可能证书不合格引起的SSL error的问题
通过取消verify解决
代理设理
(HTTP代理)
(SOCKS代理)
超时设置
认证设置
(对于有账号密码才能访问的网站)
异常处理
10.正则表达式
非python独有,re模块实现
(1)常见匹配模式
(2) re.match
最常规匹配
泛匹配
目标匹配
贪婪匹配(.*匹配尽可能多的字符)
非贪婪匹配(.*?匹配尽可能少的字符)
匹配模式
(不能匹配的原因是.不能匹配换行)
(加入参数re.S即可匹配)
转义
($和.都是特殊字符,通过\转义)
(3) re.search
扫描整个字符串,返回第一个成功的匹配
(采用re.match 如果第一个字符不匹配,则返回None)
(采用re.search则可以成功匹配)
总结: 为匹配方便,能用search就不用match
(4) 匹配演练
(5)re.findall
搜索字符串,以列表形式返回全部能匹配的字符串
(未匹配到一路有你)
(匹配到一路上有你)
(6)re.sub
匹配到的字符串返回替换后的字符串
(7)re.compile
将一个正则表达式串编译成正则表达式对象
11.BeautifulSoup库
灵活方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式即可方便的实现网页信息的提取
12.PyQuery库
强大又灵活的网页解析库。如果你觉得正则写起来太麻烦,如果你觉得BeautifulSoup语法太难记,如果你熟悉jQuery的语法。那么PyQuery就是你绝佳选择
(1)初始化
字符串初始化
URL初始化
文件初始化
(2)基本CSS选择器
(ID前用# CLASS前用. 标签 什么也不加 )
(3)查找元素
子元素
(所有子元素)
(直接子元素)
父元素
(直接父元素)
(父元素和父元素外部)
兄弟元素
(3)遍历
单个元素
多个元素
(4)获取信息
获取属性
获取文本
获取HTML
(5)DOM操作
addClass , removeClass
Attr , css
Remove
(6)伪类选择器
13.Selenium
自动化测试工具,支持多种浏览器。爬虫中主要用来解决JavaScript渲染的问题
(1)声明浏览器对象
(2)访问页面
(3)查找元素
单个元素
(通用方法)
多个元素
(4)元素交互操作
(5)交互动作
对获取的元素调用交互方法
(拖拽)
(6)执行JavaScript
(侧条下拉至底部)
(7)获取元素信息
获取属性
获取文本值
获取ID,位置,标签名,大小
Frame
(8)等待
隐式等待
(当查找元素或元素并没有立即出现的时候,隐式等待一段时间再查找DOM,默认的时间式0)
显示等待
(9)前进后退
(10)Cookies
(11)选项卡管理
- 1.爬虫入门
- 【爬虫笔记】爬虫入门
- 爬虫入门
- 爬虫入门
- 爬虫入门
- Python爬虫 | Python爬虫入门
- python爬虫入门简单爬虫
- 爬虫入门:urllib爬虫实例
- Python爬虫入门【入门篇】
- Scrapy爬虫入门
- Python爬虫入门
- Python爬虫入门
- Python爬虫入门基础
- 如何入门 Python 爬虫?
- python 爬虫入门
- 分布式爬虫入门
- 如何入门 Python 爬虫?
- Scrapy爬虫框架入门
- 小白安装中文CentOS 6.5的详细步骤及要注意点
- HDU1257--最少拦截系统 (LIS时间复杂度O(n^2)与O(nlogn)两种算法)
- Dubbo 监控中心
- IE火狐下载文件的后缀会根据MIME自动改变
- 在C#中调用python方法(转载)
- 1.爬虫入门
- 基础数据结构算法_DFS and BFS
- 背包九讲
- 基于TI DSP C6678的自适应LMS算法的实时处理
- 监督学习三 神经网络
- android 决TextView中MaxLines与ellipsize=end冲突问题
- 打印二维码(jdk1.5可用)
- 大数据实验——环境配置2
- IDEA 报 -Dmaven.multiModuleProjectDirectory system property is not set 解决办法