一.爬虫实例

1.原理:文本分析并提取信息——正则表达式。

2.实例目的:爬取熊猫TV某个分类下面主播的人气排行

分析网站结构

操作:F12查看HTML信息,Ctrl+Shift+C鼠标选取后找到对应的HTML。

3.步骤:

前奏:

1、明确目的(分析抓取目的确定抓取页面)

2、找到数据对应网页

3、分析网页的结构,找到数据所在标签的位置

执行:

4、模拟HTTP请求,向服务器发送请求,获取到服务器返回给我们的HTML

5、用正则表达式提取我们要的数据

......

4.代码

二. VSCode中调试代码

断点调试:F5启动,F10单步,F5跳断点,F11进内部

三.HTML结构分析基本原则

寻找到标签、标识符,使之能够定位要抓取的信息。

1、尽量选取具有唯一性的标签

2、尽量选取最接近于数据的标签

四.数据提取层级分析及原则

1.可以把两个数据看成是一组数据并再次寻找标签。

2.尽量选取可以闭合的标签(父级标签),并包裹其需要的数据

五.正则分析HTML及具体流程

'''
This is a spider,模块注释
''' from urllib import request import re class Spider():     '''
    This is a spider class
    '''     url = 'https://www.panda.tv/cate/lol'     root_pattern = '<div class="video-info">([\s\S]*?)</div>' #注意单双引号     #[\w\W] [\s\S] . 匹配所有字符     #* 匹配0次或者无限多次     #? 非贪婪模式,匹配到第一个遇到的</div>     name_pattern = '</i>([\s\S]*?)</span>'     number_pattern = '<span class="video-number">([\s\S]*?)</span>' def __fetch_content(self):     '''
    私有方法,获取网页内容
    '''     r = request.urlopen(Spider.url)     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)     return anchors def __refine(self,anchors):     l = lambda anchor:{     'name':anchor['name'][0].strip(),     'number':anchor['number'][0] #列表转化为单一的字符串     }     return map(l,anchors) def __sort_seed(self,anchor):     r = re.findall('\d*',anchor['number']) #提取数字     number = float(r[0])     if '万' in anchor['number']: #处理'万'         number *= 10000              return number def __sort(self,anchors):     '''
    key确定比较对象
    sorted()默认升序排列,reverse = True 降序
    不能用str排序,要用int,并且要处理'万'
    '''     anchors = sorted(anchors,key = self.__sort_seed,reverse = True)     return anchors 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): #Spider的入口方法     htmls = self.__fetch_content()     anchors = self.__analysis(htmls)     anchors = list(self.__refine(anchors))     anchors = self.__sort(anchors)     self.__show(anchors) spider = Spider() spider.go()

爬虫框架:

Beautiful Soup

Scrapy

最新文章

  1. JavaScript把项目本地的图片或者图片的绝对路径转为base64字符串、blob对象在上传
  2. mysql5.7 zip版的配置方法
  3. 无法更新 EntitySet“SoreInfo_Table”,因为它有一个 DefiningQuery,而 &lt;ModificationFunctionMapping&gt; 元素中没有支持当前操作的 &lt;InsertFunction&gt; 元素。
  4. Java主要知识结构
  5. 易语言软件加VMProtect壳的正确方法
  6. javaWeb 在jsp中 使用自定义标签输出访问者IP
  7. apiCloud中图片裁剪模块FNImageClip的使用
  8. word-pattern(mock)
  9. 浅议tomcat与classloader
  10. 用VMware 8安装Ubuntu 12.04详细过程(图解)
  11. enum类型的本质(转)
  12. 用app.net Core搞点多国语言网站
  13. Oracle的sessions和processes的数计算公式
  14. ios扫雷
  15. HDFS的接口(命令行接口和Java接口)--笔记
  16. Paxos协议超级详细解释+简单实例
  17. MySQL InnoDB下关于MVCC的一个问题的分析
  18. 深圳市共创力咨询为某大型上市企业提供两天的UCD内训与辅导服务!
  19. CDH5.12安装检查Inspector failed on the following hosts...
  20. nginx 配置信息

热门文章

  1. git版本管理工具(二)
  2. hadoop搭建
  3. Linux查看端口监听占用
  4. 为什么说ArrayList是线程不安全的?
  5. Scrum.站立会议介绍
  6. .net core appsetting/获取配置文件
  7. OpenCV在Mac下的部署 Java-IntelliJ IDEA
  8. 利用SuperMap iObjects.NET控件模拟小球平抛运动
  9. jenkins 集成jmeter-简单篇
  10. AVR单片机教程——矩阵键盘