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

明确目的
找到数据对应的网页
分析网页的结构找到数据所在的标签位置 模拟 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. IDEA中编写脚本并运行shell脚本

    IDEA中编写脚本并运行shell脚本     来自 <https://blog.csdn.net/u012443641/article/details/81295999>

  2. jquery IE7 下报错:SCRIPT257: 由于出现错误 80020101 而导致此项操作无法完成

        非IE(内核)浏览器运行正常,在IE中运行异常,一般考虑为js中多了符号.     常见的有:         1.上面的html注释"<!-- -->",这种 ...

  3. Qt之QTemporaryFile

    简述 QTemporaryFile类是操作临时文件的I/O设备. QTemporaryFile用于安全地创建一个独一无二的临时文件.临时文件通过调用open()来创建,并且名称是唯一的(即:保证不覆盖 ...

  4. EularProject 42:单词解码出来的三角形数

    Coded triangle numbers Problem 42 The nth term of the sequence of triangle numbers is given by, tn = ...

  5. [Javascript] String Padding in Javascript using padStart and padEnd functions

    ES2017 added two new string functions. They are padStart and padEndfunctions. In this lesson, we wil ...

  6. Android bluetooth介绍(一):基本概念及硬件接口

    关键词:蓝牙硬件接口 UART  PCM  blueZ 版本号:基于android4.2之前版本号 bluez内核:linux/linux3.08系统:android/android4.1.3.4作者 ...

  7. storm trident function函数

    package cn.crxy.trident; import java.util.List; import backtype.storm.Config; import backtype.storm. ...

  8. 怎样解除内容审查程序的password

    如题:怎样解除内容审查程序的password 在不知道password的情况下.通过改动注冊表解决.点击"開始"→"执行",输入"regedit&qu ...

  9. hive安装用mysql作为元数据库,mysql的设置

    mysql的设置 在要作为元数据库的mysql服务器上建立hive数据库: #建立数据库 create database if not exists hive; #设置远程登录的权限 GRANT AL ...

  10. Hadoop-CDH源码编译

    * Hadoop-CDH源码编译 这一节我们主要讲解一下根据CDH源码包手动编译的过程,至于为什么要使用CDH,前几节已经说明,那为什么又要自己手动编译,因为CDH的5.3.6对应的Hadoop2.5 ...