Python(十一) 原生爬虫
爬虫前奏 明确目的
找到数据对应的网页
分析网页的结构找到数据所在的标签位置 模拟 HTTP 请求, 向服务器发送这个请求, 获取到服务器返回给我们的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万'}
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(十一) 原生爬虫的更多相关文章
- Python3(十一) 原生爬虫
一.爬虫实例 1.原理:文本分析并提取信息——正则表达式. 2.实例目的:爬取熊猫TV某个分类下面主播的人气排行 分析网站结构 操作:F12查看HTML信息,Ctrl+Shift+C鼠标选取后找到对应 ...
- Python 开发轻量级爬虫08
Python 开发轻量级爬虫 (imooc总结08--爬虫实例--分析目标) 怎么开发一个爬虫?开发一个爬虫包含哪些步骤呢? 1.确定要抓取得目标,即抓取哪些网站的哪些网页的哪部分数据. 本实例确定抓 ...
- Python 开发轻量级爬虫07
Python 开发轻量级爬虫 (imooc总结07--网页解析器BeautifulSoup) BeautifulSoup下载和安装 使用pip install 安装:在命令行cmd之后输入,pip i ...
- Python 开发轻量级爬虫06
Python 开发轻量级爬虫 (imooc总结06--网页解析器) 介绍网页解析器 将互联网的网页获取到本地以后,我们需要对它们进行解析才能够提取出我们需要的内容. 也就是说网页解析器是从网页中提取有 ...
- Python 开发轻量级爬虫05
Python 开发轻量级爬虫 (imooc总结05--网页下载器) 介绍网页下载器 网页下载器是将互联网上url对应的网页下载到本地的工具.因为将网页下载到本地才能进行后续的分析处理,可以说网页下载器 ...
- Python 开发轻量级爬虫04
Python 开发轻量级爬虫 (imooc总结04--url管理器) 介绍抓取URL管理器 url管理器用来管理待抓取url集合和已抓取url集合. 这里有一个问题,遇到一个url,我们就抓取它的内容 ...
- Python 开发轻量级爬虫03
Python 开发轻量级爬虫 (imooc总结03--简单的爬虫架构) 现在来看一下一个简单的爬虫架构. 要实现一个简单的爬虫,有哪些方面需要考虑呢? 首先需要一个爬虫调度端,来启动爬虫.停止爬虫.监 ...
- Python 开发轻量级爬虫02
Python 开发轻量级爬虫 (imooc总结02--爬虫简介) 爬虫简介 首先爬虫是什么?它是一段自动抓取互联网信息的程序. 什么意思呢? 互联网由各种各样的的网页组成,每一个网页都有对应的url, ...
- Python 开发轻量级爬虫01
Python 开发轻量级爬虫 (imooc总结01--课程目标) 课程目标:掌握开发轻量级爬虫 为什么说是轻量级的呢?因为一个复杂的爬虫需要考虑的问题场景非常多,比如有些网页需要用户登录了以后才能够访 ...
随机推荐
- 紫书 例题8-4 UVa 11134(问题分解 + 贪心)
这道题目可以把问题分解, 因为x坐标和y坐标的答案之间没有联系, 所以可以单独求两个坐标的答案 我一开始想的是按照左区间从小到大, 相同的时候从右区间从小到大排序, 然后WA 去uDebug找了数据 ...
- HTTP——学习笔记(7)
HTTP中的认证机制 什么是认证机制?: 服务器需要知道客户端是谁. 怎样知道客户端身份?: 核对“登录者本人才知道的信息” 密码:只有本人才会知道的字符串信息 动态令牌:仅限本人持有的设备内显示的一 ...
- hadoop 2.6.0 LightWeightGSet源码分析
LightWeightGSet的作用用一个数组来存储元素,而且用链表来解决冲突.不能rehash.所以内部数组永远不用改变大小.此类不支持空元素. 此类也不是线程安全的.有两个类型參数.第一个用于查找 ...
- URL长链接转换为短链接
URL长链接转换为段链接的工具非常多,可是.小编还是要给大家唠一种方法的: 操作过程例如以下,打开腾讯微博或者其它微,将自己的URL地址值按图片操作:
- ASP.NET Application and Page Life Cycle
ASP.NET Application Life Cycle Overview for IIS 7.0 https://msdn.microsoft.com/en-us/library/bb47025 ...
- java动态导出PDF(利用itext)
项目基于ssm框架,使用itext动态导出pdf文件: 1.引入两个jar包:itextpdf-5.5.5.jar.itext-asian-5.2.0.jar 说明: 1.itextpdf-5.5.5 ...
- HDU 1240 Asteroids!【BFS】
题意:给出一个三维的空间,给出起点和终点,问是否能够到达终点 和上一题一样,只不过这一题的坐标是zxy输入的, 因为题目中说的是接下来的n行中分别是由n*n的矩形组成的,所以第一个n该是Z坐标,n*n ...
- 位运算与bitset
&运算 将两个数转化为二进制后,对应的位置上相同即取,通常取1,所以&通常情况下可以用来枚举子集 设x为表示集合的整数,那么这个整数有如下性质: x的子集整数y在数值上不会比x大.因 ...
- 函数响应式编程(FRP)从入门到”放弃”——基础概念篇
前言 研究ReactiveCocoa一段时间了,是时候总结一下学到的一些知识了. 一.函数响应式编程 说道函数响应式编程,就不得不提到函数式编程,它们俩到底有什么关系呢?今天我们就详细的解析一下他们的 ...
- error_reporting()函数
定义和用法 error_reporting() 函数跪地你给应该报告何种 PHP 错误. error_reporting() 函数能够在运行时设置 error_reporting 指令. PHP 有诸 ...