一、分析抓取目的确定抓取页面
 
#爬取主播人气排行
二、整理爬虫常规思路
 
爬虫前奏

明确目的
找到数据对应的网页
分析网页的结构找到数据所在的标签位置 模拟 HTTP 请求, 向服务器发送这个请求, 获取到服务器返回给我们的HTML
用正则表达式提取我们要的数据(名字,人数)
三、 VSCode中调试代码
 
F5 启动 和vs 调试一样
 BeautifulSoup , Scrapy
爬虫、 反爬虫、反反爬虫
ip 封
代理 ip库
五、数据提取层级分析及原则三、正则分析HTML、正则分析获取名字和人数
from urllib import request
import re
#断点调试 有坑 7i
class Spider():
url = 'https://www.panda.tv/cate/lol'
root_pattern ='<div class="video-info">([\s\S]*?)</div>'
name_pattern = '</li>([\s\S]*?)</span>'
number_pattern = '<span class="video-number">([\s\S]*?)</span>' def __fetch_content(self):
r = request.urlopen(Spider.url)
#bytes
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)
# print(anchors[0])
return anchors def __refine(self, anchors):
l = lambda anchor:{
'name':anchor['name'][0].strip(),
'number':anchor['number'][0]
}
return map(l,anchors) def go(self):
htmls = self.__fetch_content()
anchors = self.__analysis(htmls)
anchors =list(self.__refine(anchors))
print(anchors[0]) s = Spider()
s.go() 结果:
{'name': 'LOL丶摇摆哥', 'number': '26.8万'}
八、 数据精炼、 sorted 排序
 
from urllib import request
import re
#断点调试 坑 7i
class Spider():
url = 'https://www.panda.tv/cate/lol'
root_pattern ='<div class="video-info">([\s\S]*?)</div>'
name_pattern = '</li>([\s\S]*?)</span>'
number_pattern = '<span class="video-number">([\s\S]*?)</span>' # 获取数据的页面
def __fetch_content(self):
r = request.urlopen(Spider.url)
#bytes
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)
# print(anchors[0])
return anchors # 数据取杂质(空格换行)strip() 字符串去空格换行
def __refine(self, anchors):
l = lambda anchor:{
'name':anchor['name'][0].strip(),
'number':anchor['number'][0]
}
return map(l,anchors) #map类 对字典每一个序列进行l这个函数 # 对抓取的数据进行排序 reverse=True 倒序
def __sort(self, anchors):
anchors = sorted(anchors, key=self.__sort_seed, reverse=True)
return anchors # 给 key 写的函数 说明用那个进行排序
def __sort_seed(self, anchors):
r = re.findall('\d*', anchors['number'])
number = float(r[0])
if '万' in anchors['number']:
number *= 10000
return number # 显示排名
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):
htmls = self.__fetch_content()
anchors = self.__analysis(htmls)
anchors =list(self.__refine(anchors))
print(anchors[0])
anchors= self.__sort(anchors)
self.__show(anchors[:20]) s = Spider()
s.go() 结果:
{'name': 'LOL丶摇摆哥', 'number': '20.2万'}
rank 1 : 贾克虎丶虎神 96.9万人
rank 2 : LOL丶摇摆哥 20.2万人
rank 3 : LPL熊猫官方直播 12.1万人
rank 4 : WUCG官方直播平台 8.4万人
rank 5 : 温州丶黄小明 5.1万人
rank 6 : 暴君aa 4.6万人
rank 7 : 顺顺套路王 3.1万人
rank 8 : 火苗OB解说 2.5万人
rank 9 : 兰晨丶 1.1万人
rank 10 : 海洋OvO 1.9万人
rank 11 : 小马哥玩盖伦 1.6万人
rank 12 : 牛老师丶 1.5万人
rank 13 : Riot国际赛事直播间 1.5万人
rank 14 : 小白Mini 7361人
rank 15 : 一个很C的稻草人 7223人
rank 16 : 抗寒使者 4976人
rank 17 : 小麦子鲜奶油 4902人
rank 18 : 祝允儿 4574人
rank 19 : 请叫我大腿岩丶 4201人
rank 20 : 李小青ZJ 3838人

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

  1. Python3(十一) 原生爬虫

    一.爬虫实例 1.原理:文本分析并提取信息——正则表达式. 2.实例目的:爬取熊猫TV某个分类下面主播的人气排行 分析网站结构 操作:F12查看HTML信息,Ctrl+Shift+C鼠标选取后找到对应 ...

  2. Python 开发轻量级爬虫08

    Python 开发轻量级爬虫 (imooc总结08--爬虫实例--分析目标) 怎么开发一个爬虫?开发一个爬虫包含哪些步骤呢? 1.确定要抓取得目标,即抓取哪些网站的哪些网页的哪部分数据. 本实例确定抓 ...

  3. Python 开发轻量级爬虫07

    Python 开发轻量级爬虫 (imooc总结07--网页解析器BeautifulSoup) BeautifulSoup下载和安装 使用pip install 安装:在命令行cmd之后输入,pip i ...

  4. Python 开发轻量级爬虫06

    Python 开发轻量级爬虫 (imooc总结06--网页解析器) 介绍网页解析器 将互联网的网页获取到本地以后,我们需要对它们进行解析才能够提取出我们需要的内容. 也就是说网页解析器是从网页中提取有 ...

  5. Python 开发轻量级爬虫05

    Python 开发轻量级爬虫 (imooc总结05--网页下载器) 介绍网页下载器 网页下载器是将互联网上url对应的网页下载到本地的工具.因为将网页下载到本地才能进行后续的分析处理,可以说网页下载器 ...

  6. Python 开发轻量级爬虫04

    Python 开发轻量级爬虫 (imooc总结04--url管理器) 介绍抓取URL管理器 url管理器用来管理待抓取url集合和已抓取url集合. 这里有一个问题,遇到一个url,我们就抓取它的内容 ...

  7. Python 开发轻量级爬虫03

    Python 开发轻量级爬虫 (imooc总结03--简单的爬虫架构) 现在来看一下一个简单的爬虫架构. 要实现一个简单的爬虫,有哪些方面需要考虑呢? 首先需要一个爬虫调度端,来启动爬虫.停止爬虫.监 ...

  8. Python 开发轻量级爬虫02

    Python 开发轻量级爬虫 (imooc总结02--爬虫简介) 爬虫简介 首先爬虫是什么?它是一段自动抓取互联网信息的程序. 什么意思呢? 互联网由各种各样的的网页组成,每一个网页都有对应的url, ...

  9. Python 开发轻量级爬虫01

    Python 开发轻量级爬虫 (imooc总结01--课程目标) 课程目标:掌握开发轻量级爬虫 为什么说是轻量级的呢?因为一个复杂的爬虫需要考虑的问题场景非常多,比如有些网页需要用户登录了以后才能够访 ...

随机推荐

  1. HTTP 文件共享服务器工具 - chfs

    CuteHttpFileServer/chfs是一个免费的.HTTP协议的文件共享服务器,使用浏览器可以快速访问.它具有以下特点: 单个文件,整个软件只有一个可执行程序,无配置文件等其他文件 跨平台运 ...

  2. python学习笔记:第五天

    day05: 1.字符串格式化输出: 1.占位符:%s (字符串)    %d(整型)   %f (浮点型) 打印格式:print("字符串为%s" %s) 2.字符串:判断是否是 ...

  3. unity Android在streamingAssets路径下文件无法读取的的解决方法

    unity Android在streamingAssets路径下文件,有时候plugin下的.jar或者.so无法直接读取: 解决方法之一,拷贝至其他路径: #if UNITY_ANDROID str ...

  4. 【转】 C# DEBUG 调试信息打印及输出详解

    [转] C# DEBUG 调试信息打印及输出详解 1.debug只在[debug模式下才执行](运行按钮后面的下拉框可选) 2.debug提供了许多调试指令,如断言          System.D ...

  5. POJ 3368 Frequent values(RMQ 求区间出现最多次数的数字的次数)

    题目链接:http://poj.org/problem? id=3368 Description You are given a sequence of n integers a1 , a2 , .. ...

  6. Visual Assist X 10.8.2036的Crack破解补丁.2014.05.22 (General release.)

    说起来,VA公布上一个Genreal Release版本号已经是过春节那阵子时候的事了,时间过得真快. VA小组又给我们带来了新版本号的Visual Assist编码助手的 2036 版本号, 这个版 ...

  7. Android微信智能心跳方案 Android微信智能心跳方案

    原文地址: http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=207243549&idx=1&sn=4ebe4beb81 ...

  8. 用jquery给select加选中事件

    select在前端开发过程中很常用,现在我们要实现一个效果,那就是选中select中的某一项,执行事件,本来自己没怎么接触过这些,最后网上找了一些资料,自己研究了一下,把方法分享给大家,大家如果有需要 ...

  9. 131.typename在嵌套类中的作用

    #include <iostream> using namespace std; class myit { public: static int num; class itit { }; ...

  10. Android框架-Volley(四)

    经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了,但是对于Volley的工作原理,恐怕有很多朋友还不是很清楚.因此,本篇文章中我们就来一起阅读一下Volley的源码,将它的工作流程整体地 ...