1.爬虫入门

来源:互联网 发布:黑莓解网络锁软件 编辑:程序博客网 时间:2024/05/29 08:03

1.什么是爬虫? 请求网站并提取数据的自动化程序

2.爬虫的基本流程

 1发起请求:通过HTTP库向目标站点发起请求,即发送一个Reques,请求可以(headers等信息

 2获取响应内容:如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型

 3解析内容:得到的内容可能是HTML,可以用正则表达式,网页解析库进行解析,可能是二进制数据,可以做保存或者进一步的处理

  4保存数据:保存形式多样,可以作为文本,也可以保存至数据库,或者保存特定格式的文件。

 

3.什么是RequestResponse?

 

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)直接处理

   2Json解析

3)正则表达式

(4BeautifulSoup

(5)PyqUERY

(6)XPath

 

6.怎样解决JavaScript渲染问题?

  分析Ajax请求

  Selenium/WebDriver

  Splash

  PyV8,Ghost.py

 

7.怎样保存数据

  文本:纯文本,Json,Xml

  关系型数据库:如MySQL,Oracle,SQL Server等具有结构化表结构形式存储

  非关系型数据库:如MongoDB,RedisKey-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编码encodedecode

计算机里面,编码方法有很多种,英文的一般用ascii,而中文有unicodeutf-8,gbk,utf-16等等。

 

unicodeutf-8,gbk,utf-16这些的父编码,这些子编码都能转换成unicode编码,然后转化成子编码,例如utf8可以转成unicode,再转gbk,但不能直接从utf8gbk

 

所以,python中就有两个方法用来解码(decode)与编码(encode),解码是子编码转unicode,编码就是unicode转子编码

 

设置超时时间


 

 

响应类型

 

 

 

状态码,响应头

 

 

 

 


 Request

 

(和之前的urlopen+URL效果相同)

 

 

 

 

  代理

 

         伪装IP地址)

当你获取一个URL你使用一个opener。在前面,我们都是使用的默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是urldatatimeout

如果我们需要用到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请求


 (带headersPOST请求 )

   

 

(3)响应

reponse属性

 

 

状态码判断

 

 

 

(4)高级操作

        文件上传

     

     

        获取cookie

 

 

        会话维持

 

获取不到,是因为两个get像在两个浏览器访问,第一个set不影响第二个get

 

 通过Session维持登陆会话

 

 

         证书验证

 

 

 

对于HTTPS的网站,可能证书不合格引起的SSL error的问题

 

  通过取消verify解决

 

        代理设理

HTTP代理)

 

SOCKS代理)

 

 

        超时设置

 

 

        认证设置

 

  (对于有账号密码才能访问的网站)

 

        异常处理

 

 

10.正则表达式

  python独有,re模块实现

 

 1)常见匹配模式

 

     

2re.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)选项卡管理

 


原创粉丝点击