一.爬虫实例

1.原理:文本分析并提取信息——正则表达式。

2.实例目的:爬取熊猫TV某个分类下面主播的人气排行

分析网站结构

操作:F12查看HTML信息,Ctrl+Shift+C鼠标选取后找到对应的HTML。

3.步骤:

前奏:

1、明确目的(分析抓取目的确定抓取页面)

2、找到数据对应网页

3、分析网页的结构,找到数据所在标签的位置

执行:

4、模拟HTTP请求,向服务器发送请求,获取到服务器返回给我们的HTML

5、用正则表达式提取我们要的数据

......

4.代码

二. VSCode中调试代码

断点调试:F5启动,F10单步,F5跳断点,F11进内部

三.HTML结构分析基本原则

寻找到标签、标识符,使之能够定位要抓取的信息。

1、尽量选取具有唯一性的标签

2、尽量选取最接近于数据的标签

四.数据提取层级分析及原则

1.可以把两个数据看成是一组数据并再次寻找标签。

2.尽量选取可以闭合的标签(父级标签),并包裹其需要的数据

五.正则分析HTML及具体流程

'''
This is a spider,模块注释
''' from urllib import request import re class Spider():     '''
    This is a spider class
    '''     url = 'https://www.panda.tv/cate/lol'     root_pattern = '<div class="video-info">([\s\S]*?)</div>' #注意单双引号     #[\w\W] [\s\S] . 匹配所有字符     #* 匹配0次或者无限多次     #? 非贪婪模式,匹配到第一个遇到的</div>     name_pattern = '</i>([\s\S]*?)</span>'     number_pattern = '<span class="video-number">([\s\S]*?)</span>' def __fetch_content(self):     '''
    私有方法,获取网页内容
    '''     r = request.urlopen(Spider.url)     htmls = r.read()     htmls = str(htmls,encoding = 'utf-8')     return htmls def __analysis(self,htmls):     '''
    正则表达式来提取数据
    '''     root_html = re.findall(Spider.root_pattern,htmls)     anchors = []     for html in root_html:         name = re.findall(Spider.name_pattern,html)         number = re.findall(Spider.number_pattern,html)         anchor = {'name':name,'number':number}         anchors.append(anchor)     return anchors def __refine(self,anchors):     l = lambda anchor:{     'name':anchor['name'][0].strip(),     'number':anchor['number'][0] #列表转化为单一的字符串     }     return map(l,anchors) def __sort_seed(self,anchor):     r = re.findall('\d*',anchor['number']) #提取数字     number = float(r[0])     if '万' in anchor['number']: #处理'万'         number *= 10000              return number def __sort(self,anchors):     '''
    key确定比较对象
    sorted()默认升序排列,reverse = True 降序
    不能用str排序,要用int,并且要处理'万'
    '''     anchors = sorted(anchors,key = self.__sort_seed,reverse = True)     return anchors def __show(self,anchors):     for rank in range(0,len(anchors)):         print('rank ' + str(rank + 1) +     ':' + ' ' + anchors[rank]['name'] +     '————' + anchors[rank]['number']) def go(self): #Spider的入口方法     htmls = self.__fetch_content()     anchors = self.__analysis(htmls)     anchors = list(self.__refine(anchors))     anchors = self.__sort(anchors)     self.__show(anchors) spider = Spider() spider.go()

爬虫框架:

Beautiful Soup

Scrapy

Python3(十一) 原生爬虫的更多相关文章

  1. Python(十一) 原生爬虫

    一.分析抓取目的确定抓取页面   #爬取主播人气排行 二.整理爬虫常规思路   爬虫前奏 明确目的 找到数据对应的网页 分析网页的结构找到数据所在的标签位置 模拟 HTTP 请求, 向服务器发送这个请 ...

  2. Python3爬虫(十一) 爬虫与反爬虫

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.重要概念 二.爬虫反爬虫进化论

  3. python3下scrapy爬虫(第十一卷:scrapy数据存储进mongodb)

    说起python爬虫数据存储就不得不说到mongodb,现在我们来试一下scrapy操作mongodb 首先开启mongodb mongod --dbpath=D:\mongodb\db 开启服务后就 ...

  4. python3下scrapy爬虫(第一卷:安装问题)

    一般爬虫都是用urllib包,requests包 配合正则.beautifulsoup等包混合使用,达到爬虫效果,不过有框架谁还用原生啊,现在我们来谈谈SCRAPY框架爬虫, 现在python3的兼容 ...

  5. Python3编写网络爬虫11-数据存储方式四-关系型数据库存储

    关系型数据库存储 关系型数据库是基于关系模型的数据库,而关系模型是通过二维表保存的,所以它的存储方式就是行列组成的表.每一列是一个字段,每一行是一条记录.表可以看作某个实体的集合,而实体之间存在联系, ...

  6. Python3之网络爬虫<0>初级

    由于Python3合并URLib与URLlib2统一为URLlib,Python3将urlopen方法放在了urllib.request对象下. 官方文档:https://docs.python.or ...

  7. Python3的原生协程(Async/Await)和Tornado异步非阻塞

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_113 我们知道在程序在执行 IO 密集型任务的时候,程序会因为等待 IO 而阻塞,而协程作为一种用户态的轻量级线程,可以帮我们解决 ...

  8. 运筹帷幄决胜千里,Python3.10原生协程asyncio工业级真实协程异步消费任务调度实践

    我们一直都相信这样一种说法:协程是比多线程更高效的一种并发工作方式,它完全由程序本身所控制,也就是在用户态执行,协程避免了像线程切换那样产生的上下文切换,在性能方面得到了很大的提升.毫无疑问,这是颠扑 ...

  9. python3 黑板客爬虫闯关游戏(一)

    这是学习python爬虫练习很好的网站,强烈推荐! 地址http://www.heibanke.com/lesson/crawler_ex00/ 第一关猜数字 很简单,直接给出代码 import ur ...

随机推荐

  1. java架构之路(多线程)大厂方式手写单例模式

    上期回顾: 上次博客我们说了我们的volatile关键字,我们知道volatile可以保证我们变量被修改马上刷回主存,并且可以有效的防止指令重排序,思想就是加了我们的内存屏障,再后面的多线程博客里还有 ...

  2. Oracle索引大全

    文档结构如下: 前言: Oracle 官方文档对索引的描述真是弱透了,对索引的说明就是一坨……,support也没有很好的资料,下面还是用的官方上的内容经过自己的整理加上网上的资料. 索引类型: 索引 ...

  3. 从源码角度了解SpringMVC的执行流程

    目录 从源码角度了解SpringMVC的执行流程 SpringMVC介绍 源码分析思路 源码解读 几个关键接口和类 前端控制器 DispatcherServlet 结语 从源码角度了解SpringMV ...

  4. 性能测试-详细的 TPS 调优笔记

    概述 在本地针对项目的登录接口做了一次简单的压力测试.200并发持续120s,观察吞吐量 运行结束之后,吞吐量是这样的 如图所示,吞吐量波动巨大,完全不正常.现在我们需要去观察一下服务器了 mpsta ...

  5. Java 项目热部署,节省构建时间的正确姿势

    上周末,帮杨小邪(我的大学室友)远程调试项目.SpringBoot 构建,没有热部署,改一下就得重启相关模块.小小的 bug ,搞了我一个多小时,大部分时间都还在构建上(特么,下次得收钱才行).我跟他 ...

  6. Java 使用Scanner时的NoSuchElementException异常

    做实验时设计了一个类,在类中的两个不同函数中分别创建了两个Scanner对象,并且在各个函数的结尾使用了close()方法,结果在运行时产生了NoSuchElementException异常. 实验的 ...

  7. 图像矫正技术深入探讨(opencv)

    刚进入实验室导师就交给我一个任务,就是让我设计算法给图像进行矫正.哎呀,我不太会图像这块啊,不过还是接下来了,硬着头皮开干吧! 那什么是图像的矫正呢?举个例子就好明白了. 我的好朋友小明给我拍了这几张 ...

  8. Scala 学习(7)之「trait (1) 」

    作为接口使用 在 triat 中可以定义抽象方法,就与抽象类中的抽象方法一样,只要不给出方法的具体实现即可 类可以使用 extends 关键字继承 trait,注意,这里不是 implement,而是 ...

  9. <img>和background-img区别

    1. 是否占位 background-image是背景图片,是css的一个样式,不占位 <img />是一个块状元素,它是一个图片,是html的一个标签,占位 2.否可操作 backgro ...

  10. kubernetes从私有仓库下载遇到的坑

    1.必须要在所有的k8s节点上配置私有仓库的地址.(master和node) 2.创建secret kubectl create secret docker-registry secret名字 --d ...