Python 原生爬虫
Posted 因为专注。所以专业
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 原生爬虫相关的知识,希望对你有一定的参考价值。
Python3 实现游戏主播人气排行榜
from urllib import request import re # 爬取某个游戏主播的人气(每个游戏主播的观看人数)排行榜 ‘‘‘ 爬虫前奏: 明确爬虫目的 找到数据对应的网页 分析网页的结构找到数据所在的标签位置 模拟HTTP请求,向服务器发送这个请求,获取到服务器返回给我们的HTML 利用正则表达式提取我们要的数据(主播名字,人气) 概括字符集: d D w 单词字符 W s 空白字符 S . 匹配除换行符 之外的所有字符 爬虫框架: Scrapy BeautifulSoup 进阶: 爬虫 大数据的存储 数据的分析 常见问题: 反爬虫 反反爬虫 IP被封 代理IP库 ‘‘‘ class Spider(): url = ‘https://www.panda.tv/cate/lol‘ root_pattern = ‘<div class="video-info">([sS]*?)</div>‘ name_pattern = ‘</i>([sS]*?)</span>‘ number_pattern = ‘<span class="video-number">([sS]*?)</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): jl = lambda anchors: { ‘name‘: anchors[‘name‘][0].strip(), ‘number‘: anchors[‘number‘][0].strip() } return map(jl, anchors) def __sort(self, anchors): # filter anchors = sorted(anchors, key=self.__sort_seed, reverse=True) return anchors def __sort_seed(self, anchor): r = re.findall(‘d*.d*‘, anchor[‘number‘]) number = float(r[0]) if ‘万‘ in anchor[‘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)) anchors = self.__sort(anchors) self.__show(anchors) spider = Spider() spider.go()
以上是关于Python 原生爬虫的主要内容,如果未能解决你的问题,请参考以下文章
python小课堂专栏python小课堂33 - 初识原生爬虫优化