栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python爬虫技术步骤_python网络爬虫技术?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python爬虫技术步骤_python网络爬虫技术?

爬虫基础知识
爬虫类型
    按抓取范围分类
      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      选择的所有节点
#id                 #b1         选择id="b1"的所有节点
*                   *           所有节点
element             a           选择所有节点
element,element     div,a       选择所有节点和所有节点
element>element     div>a       选择父节点以之后的所有节点
element+element     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的节点
    aList = findall(']*post-item[^>]*>[^<]*',htmlStr)
    result = []
    #提取每一个节点中的URL
    for a in aList:
        #利用正则表达式提取节点中的URL
        g = search('href[s]*=[s]*['"]([^>'""]*)['"]',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中输出的结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/783660.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号