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--课程目标) 课程目标:掌握开发轻量级爬虫 为什么说是轻量级的呢?因为一个复杂的爬虫需要考虑的问题场景非常多,比如有些网页需要用户登录了以后才能够访 ...
随机推荐
- Laravel核心解读--ENV的加载和读取
Laravel在启动时会加载项目中的.env文件.对于应用程序运行的环境来说,不同的环境有不同的配置通常是很有用的. 例如,你可能希望在本地使用测试的Mysql数据库而在上线后希望项目能够自动切换到生 ...
- pandas 4 处理缺失数据nan
from __future__ import print_function import pandas as pd import numpy as np np.random.seed(1) dates ...
- HDU 2295 Radar 重复覆盖 DLX
题意: N个城市,M个雷达站,K个操作员,问雷达的半径至少为多大,才能覆盖所有城市.M个雷达中最多只能有K个同时工作. 思路: 二分雷达的半径,看每个雷达可以覆盖哪些城市,然后做重复覆盖,判断这个半径 ...
- ASP.NET-ajax.BeginForm使用02
Ajax.BeginForm中OnFailure.Onsuccess.OnComplete函数是可以处理从后台返回的数据的,比直接使用jquery的$.ajax方法还要节约时间 @using( ...
- linux下创建带password的用户
一直在做实验室linuxserver的账号管理系统,现阶段是用户申请后我这边收到邮件,然后手动创建,这个略显麻烦,打算全然做成自己主动化的.用户申请后,我直接在管理界面点击批准就可以创建用户,同一时候 ...
- Springmvc JSON交互
先上前端javascript.ajax代码 <pre name="code" class="javascript"> function testAj ...
- vijos - P1732能量採集 (状态转移)
P1732能量採集 Accepted 标签:NOI2010[显示标签] 背景 描写叙述 栋栋有一块长方形的地.他在地上种了一种能量植物,这样的植物能够採集太阳光的能量. 在这些植物採集能量后,栋栋再使 ...
- lua实现大数运算
lua实现的大数运算,代码超短,眼下仅仅实现的加减乘运算 ------------------------------------------------ --name: bigInt --creat ...
- jsp登录会话
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Bayes++ Library入门学习之熟悉class-Bayesian_filter_base(2)
前面我们已经熟悉了Bayesian_filter::Bayes_filter_base和其子类的击继承关系,接下来我们开始学习该类的实现. bayesFlt.hpp文件为其实现主体,首先是两个常规的头 ...