python爬虫

爬虫

网络爬虫的流程:

  1. 获取网页:获取网页就是给一个网页发送请求,该网页会返回整个网页的数据,类似在浏览器中键入网站并且按回车键,然后就可以看到网站的整个内容。

  2. 解析网页(提取所需要的信息):就是从整个网页的数据中提取想要的数据,类似在浏览去中看到网站的整个网页,但是你需要提取你需要的信息

  3. 存储信息:一般可以存储在csv或者数据库中。

网络爬虫的技术实现:

  1. 获取网页:
    1. 获取网页的基础技术:requests、urllib和selenium(模拟浏览器也可以使用谷歌模拟)
    2. 获取网页的进阶技术:多进程多线程抓取,登陆抓取,突破IP封禁和服务器抓取。
  2. 解析网页:
    1. 解析网页的基础技术:re正则表达式,Beautiful Soup和lxml
    2. 解析网页的进阶技术:解决中文乱码问题
  3. 存储数据:
    1. 存储数据的基础技术:存入txt文件中和存入csv文件中
    2. 存储数据的进阶技术:存入Mysql数据库中和存入MongoDB数据库中

掌握定向网络数据爬取和网页解析的基本能力

将网站当成API

一 、 requests

  1. 自动爬取html页面,自动网络请求提交

  2. 最优秀的爬虫库

  3. 方法 说明
    requests.request() 构造一个请求,支撑以下各方法的基础方法
    requests.get() 获取HTML网页的主要方法,对应HTTP的GET
    requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
    request.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST
    request.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
    request.patch() 向HTML网页提交局部修改请求,对应HTTP的PATCH
    requests.delete() 向THTML网页提交删除请求,对应HTTP的DELETE
    1. requests.get(url,params = None,**kwargs)
      1. url:网页的url链接
      2. params:url的额外参数,字典或者字节流格式,是可选择的
      3. **kwargs:12个控制访问的参数,是可选择的。
  4. Requests库的2的重要对象

    1. r = requests.get(url)

    2. Response(包含了爬虫返回的所有内容)

    3. Response对象的属性 说明
      r.status_code HTTP请求的返回状态,200表示链接成功,404表示失败(一般来说除了200,其余都是失败的)
      r.text HTTP响应内容的字符串形式,即,url对应的页面内容
      r.encoding 从HTTPheader中猜测的响应内容编码方式
      r.apparent_encoding 从内容中分析出响应内容的编码方式(备选编码方式)
      r.content HTTP响应内容的二进制形式(主要是用于图片等)
    4. Request

    5. r.status_code 状态码,如果为200,证明能爬虫成功,其余失败

    6. r.headers 返回get请求获得页面的头部信息

    7. 如果r.header中不存在charset,可以认为编码方式维ISO-8859-1(这个可以通过r.encoding获得)

    8. 如果出现乱码,可以用r.apparent_encoding获得备用编码,然后用r.encoding = '获得的编码',也可以直接尝试r.encoding = 'utf-8'

  5. Requests异常

  6. 异常 说明
    r.raise_for_status() 如果不是200,产生异常requests.HTTPError
#检测代码是否可以爬取
import requests


def getHTMLTEXT(url):
    try:
        r = requests.get(url,timeout = 30)
        r.raise_for_status()   #如果状态码不是200,会出错
        r.encoding = r.apparent_encoding
        return r.text  # 获取头部
    except Exception as e:
        return e



if __name__ == '__main__':
    url = "http://baidu.com"
    print(getHTMLTEXT(url))

HTTP协议

HTTP,Hypertext Transfer Protocol 超文本传输协议

HTTP是一个基于"请求与响应"模式的,无状态的应用层协议

HTTP协议采用URL作为定位网络资源的标识。

URL格式:http://host[:post][path]

URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源。

  1. host:合法的Internet主机域名或者IP地址

  2. port:端口号,缺省端口为80(默认为80)

  3. path:请求资源的路径

  4. HTTP协议对资源的操作

  5. 1566219086050

主要掌握get,head

网络链接有风险,异常处理很重要:

#检测代码是否可以爬取
import requests


def getHTMLTEXT(url):
    try:
        r = requests.get(url,timeout = 30)
        r.raise_for_status()   #如果状态码不是200,会出错
        r.encoding = r.apparent_encoding
        return r.text  # 获取头部
    except Exception as e:
        return e



if __name__ == '__main__':
    url = "http://baidu.com"
    print(getHTMLTEXT(url))

二、robots.txt 协议

  1. Robits Exclusion Standard网络爬虫排除标准

  2. 作用:网站告知网络爬虫那些页面可以爬取,那些不行。

  3. 形式:在网站根目录下的robots.txt文件

    百度的robots协议: https://www.baidu.com/robots.txt

    # 例子:
    
    
    User-agent: Baiduspider   #(百度爬虫引擎)允许那些用户爬取
    Allow: /article       #允许访问/article.html、/article/12345.com
    Disallow: /baidu      # 不允许爬取的内容
    Disallow: /s?		# 不允许爬取的内容
    Disallow: /ulink?	# 不允许爬取的内容
    Disallow: /link?	# 不允许爬取的内容
    Disallow: /home/news/data/	# 不允许爬取的内容
    Disallow: /     # 禁止爬取除了Allow规定页面之外的其他任何界面。
    

    以Allow开头URL 链接的是可以进行爬取的内容,以Disallow开头的链接是不允许访问爬取的。

    如果没有robots.txt文件,那么就可以爬取所有的内容。

三、 Beautiful Soup

  1. 解析Html页面

  2. 提取相关信息

  3. BeautifulSoup

  4. 基本元素内容

遍历

下行遍历

上行遍历

平行遍历

总结,元素,功能

信息标记

国际公认的信息标记种类有三种,分别是xml,json,yaml

  1. xml 扩展标记语言

  2. json对面向对象的一种表达形式 键值对有类型

  3. yaml 无类型键值对表达形式

一般来说yaml最容易读,yaml的信息

信息提取

四、Projects 实战项目A/B

五、正则表达式 Re

#正则表达式
#一种通用的字符串表达框架
#简洁表达的一组字符串的表达式
#针对字符串表达的“简洁”和“特征”的是思想
#作用:
#表达文本类型的特征
#同时查找或者替换一组字符串
#匹配字符串的全部或者部分区域
#正则表达式的使用
#编译:将符合正则表达式语法的字符串转化成正则表达式特征

5.1 re匹配Ip地址

re库的主要功能


5.3最小匹配

六、Scrapy* 网络爬虫原理(专业爬虫)

posted @ 2019-08-25 11:18  豆瓣酱瓣豆  阅读(283)  评论(0编辑  收藏  举报