Python爬虫技术深入(1.1 爬虫基础)

爬虫基础知识

爬虫类型
    按抓取范围分类
      1、全网爬虫:用于抓取整个互联网的数据,主要用于搜索引擎(Google、Baidu)的数据源
      2、站内爬虫:与全网爬虫相似,主要用于爬取站内的网络资源。主要用于企业内部搜索引擎的数据源。
      3、定向爬虫
    按抓取内容和方式分类
      1、网页文本爬虫
      2、图像爬虫
      3、js爬虫
      4、一步数据爬虫(json、xml),主要抓取基于AJAX的系统的数据
      5、抓取其他数据的爬虫(word、excel、pdf等)

爬虫相关Web基础知识

HTTP请求方法
| 方法  |    描述
——————————————————————————————————————————
|GET    |请求指定的网页内容,并返回页面内容
|HEAD   |与GET请求相似,只不过返回的响应信息中没有具体的内容,该方法仅用于获取响应头
|POST   |请求指定的页面信息,只是提交的数据包含在请求体中,通常用于表单提交或上传文件
|PUT    |用客户端向服务器传送的数据取代指定的文档内容
|DELETE |请求服务器删除指定的页面
|CONNECT|将服务器作为跳板,让服务器代替客户端访问指定网页相当于将服务器作为代理使用
|OPTIONS|允许有客户端查看服务器的性能
|TRACE  |回显服务器收到的请求,主要用于诊断或者测试
————————————————————————————————————————————————————————————————————————————————————
==请求头:编写请求头是一个重要步骤
1、Accept:请求报头域,用于告诉服务端,客户端可以接收什么类型的信息。
2、Accept-Charset:指定客户端可接受的编码格式
3、Accept-Encoding:指定客户端可接受的内容编码列表
4、Accept-Language:指定客户端可接受的语言列表
5、Content-Length:指定客户端提交的请求体的大小(以字节为单位)
6、Content-Type:请求体的文档类型
7、Cookie:存储在本地的数据,通常以key-value的方式存储
8、Host:服务器的域名和端口号
9、Referer:用来表示这个请求是从哪个页面发过来的,,服务器可以用这一信息做相应的处理
10、User-Agent:用于表示客户端的操作系统和浏览器版本。可以用于模拟浏览器和操作系统,反爬虫经常使用
————————————————————————————————————————————————————————————————————————————————————
Content-Type字段值                         提交的数据类型
application/x-www-form-urlencoded           表单
multipart/form-data                         上传的文件
application/json                            JSON格式
text/xml                                    XML格式的数据
————————————————————————————————————————————————————————————————————————————————————
响应码状态       含义
    1           信息,服务器受到请求,需要请求者继续执行
    2           成功,操作被成功接收并处理
    3           重定向,需要进一步的操作以完成请求
    4           客户端错误,请求包含语法错误或无法完成请求
    5           服务器错误,服务器在处理请求的过程中发生了错误
————————————————————————————————————————————————————————————————————————————————————
常见状态码   说明             详细
   100      继续            客户端应继续提出请求,服务器已经收到了一部分,等待剩余部分
   200      切换协议         服务器根据客户端的请求切换协议,只能向高协议切换
   202      已接受           服务器已接受但未处理完成
   204      已创建           请求成功,并且服务器创建了新的资源
   301      永久移动         请求的网页已经永久移动到新位置,即永久重定向
   404      未找到!         服务器找不到请求的资源
   500      服务器内部错误   服务器内部错误,无法完成请求
   503      服务不可用       由于超载或系统维护,服务器暂时无法处理客户端的请求
————————————————————————————————————————————————————————————————————————————————————
响应头:主要关注响应体中的数据内容,HTML格式(页面返回)和JSON格式(Web API)的数据
1、Content-Type:表示响应体中的数据属于什么类型。
2、Date:表示产生响应的时间
3、Content-Encoding:指定响应内容的编码
4、Server:包含服务器的信息,如服务器名、版本号等
5、Set-Cookie:设置Cookie。
6、Expires:指定缓存的过期时间
————————————————————————————————————————————————————————————————————————————————————
CSS选择器(很重要!)
选择器             例子       描述
.class              .title      选择class="title"的所有节点
#id                 #b1         选择id="b1"的所有节点
*                   *           所有节点
element             a           选择所有<a>节点
element,element     div,a       选择所有<div>节点和所有<a>节点
element>element     div>a       选择父节点以<div>之后的所有<a>节点
element+element     div+a       选择紧接在<div>节点之后的所有<a>节点
[attribute]         [target]    选择带有target属性的所有节点
[attribute=value]   [target=_blank]     选择target="_blank"的所有节点
————————————————————————————————————————————————————————————————————————————————————

案例-抓取博客园网站中最新的文章标题和url地址

这里的案例不作为学习要求,读者可以自己尝试,后续继续学习。

from urllib3 import *
from re import *
http = PoolManager()
#禁止显示警告信息
disable_warnings()
#下载url对应的Web页面
def download(url):
    result = http.request('GET',url)
    #获取Web页面对应的HTML代码
    htmlStr = result.data.decode('utf-8')
    return htmlStr
#分析HTML代码
def analyse(htmlStr):
    #通过正则表达式获取所有class属性为post-item的<a>节点
    aList = findall('<a[^>]*post-item[^>]*>[^<]*</a>',htmlStr)
    result = []
    #提取每一个<a>节点中的URL
    for a in aList:
        #利用正则表达式提取<a>节点中的URL
        g = search('href[\s]*=[\s]*[\'"]([^>\'""]*)[\'"]',a)
        #通过查找的方式提取<a>节点的博客标题)[\'"]', a)
        if g != None:
            url = g.group(1)
        index1 = a.find(">")
        index2 = a.rfind("<")
        #获取博客标题
        title = a[index1 + 1:index2]
        d = {}
        d['url'] = url
        d['title'] = title
        result.append(d)
    #返回一个包含博客标题和URL的对象
    return result
#抓取博客列表
def crawler(url):
    html = download(url)
    blogList = analyse(html)
    #输出博客园首页的所有博客的标题和URL
    for blog in blogList:
        print("title:",blog["title"])
        print("url:",blog["url"])
#开始抓取博客列表
crawler('https://www.cnblogs.com')

Pycharm中输出的结果
在这里插入图片描述

写在前面:
  1. 爬虫主要分为两部分:
    网络库,是用来地址访问网页的工具。
    解析库,是用来解析网页内容的工具。
  2. 除了上述以外还会提到数据存储,更高级的爬虫知识,更高效更便捷的爬虫框架。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值