1. 爬虫的选取:scrapy和requests+beautifuisoup

  scrapy是框架,而requests和beautifulsoup是库。scrapy框架是可以加如requests和beautifulsoup库的,而scrapy是基于twisted,性能是最大的优势。scrapy方便扩展,提供很多内置的功能。scrapy内置的css和xpath selector非常方便,beautifulsoup就是有点慢。

2.常见网页分类

  静态网页,动态网页、webservice

3.爬虫能做什么

  1)搜索引擎---百度、google、垂直领域搜索引擎

  2)推荐引擎---今日头条

  3)机器学习的数据样本

  4)数据分析(如金融数据分析)、舆情分析等

4.正则表达式

  1)特殊字符(^)

代码:
      import re
      """
      1)^"必须是^后面的字符"
      2) .是除了\n的任意字符
      3) *是一个限定符,用来修饰前一个字符或分组,限定匹配重复的数量为任意数量。
      """
      #”^“、”.“、”ד测试
      test_str = "zzbaby"
      reg_str = "^b.*"
      if re.match(reg_str,test_str):
        print("yes")
      else:
        print("no")

结果:

    no 

  2)特殊字符($)

代码:

    """
    1)$"表示必须有以$前面的字符结尾"
    """
    reg_str_1 = ".*y$"
    if re.match(reg_str_1,test_str):
     print("yes")
    else:
     print("no")
结果:
     yes

  3)特殊字符(?)

代码:

"""
1)?表示非贪婪模式
"""
   test_str = "zbbbbbbzzbaby"
  reg_str_2 = ".*?(z.*?z).*"#?表示从左边开始匹配遇到第一个Z就开始进入匹配第二个?表示不要贪婪太多只需要匹配遇到第二个z就结束
  if re.match(reg_str_2,test_str):
   print(re.match(reg_str_2,test_str).group(1))#表示提取第一次符合reg_str_2的字符,正则表达式是反向匹配的
  else:
   print("error")
结果:
  zbbbbbbz
4)特殊字符+
代码:
  """
  1)+是一个限定符,用来修饰前一个字符或分组,限定匹配重复的数量至少为一次数量。
  """
  reg_str_3 = "(.+.*)"#正则表达式默认是贪婪模式
  if re.match(reg_str_3,test_str):
   print(re.match(reg_str_3,test_str).group(1))#表示提取第一次符合reg_str_2的字符,正则表达式是反向匹配的
  else:
   print("error")
结果:
  zbbbbbbzzbaby
5)特殊字符{}
代码:
  """
  1){2}表示大括号里面出现的数字是前面出现的次数
  2){2,}表示大括号数值以上的次数
  3){2,5}表示2次以上5次以下   """
  reg_str_4 ="(.{2}.)"#表示出现前两个字符
  reg_str_5= "(.+b{2,})"#表示b前面要至少有一个字符后匹配2个以上的b
  reg_str_6= "(.+b{1,6})"#表示b前面要至少有一个字符后匹配1个以上的b,6个以下的b
  print(re.match(reg_str_4,test_str).group(1))#表示打印前两个字符
  print(re.match(reg_str_5,test_str).group(1))#表示两次以上的字符,由于贪婪所以会打印最长
  print(re.match(reg_str_6,test_str).group(1))#打印的是在b之前至少存在1个字符而且b出现的次数在1次以上6次以下
 结果:

    zbb
   zbbbbbb
   zbbbbbb

6)特殊字符|

代码: 

  """
  1)表示或者的意思
  """
  reg_str_7 = "(zz|zb)"#提取zz或者zb优先左边打印
  print(re.match(reg_str_7,test_str).group(1))#group中的数字代表的是括号的层数,常常用于提取子字符串 结果:
  zb
7)特殊字符[]
代码:
  """
  1)[]相当于只能输入[]中的字符
  2)[]有一种使用方法[0-9]只能输入0-9之间的数据
  3)[]还有一种使用方法[^1]表示只能输入不是1的数据
  """
  #[]的前一种使用方式
  print("请输入一个电话号码:")
  #test_str = input()
  reg_str_1 ="1[3578][0-9]{9}"#表示第二位只能输入3、5、8、7的数值,[0-9]则表示输入1-9之间的数据
  if re.match(reg_str_1,test_str):
   print(test_str)
  else:
   print("error")
  #[^]的使用方法
  print("输入一个最后不为1的电话号码:")
  test_str = input()
  reg_str_1 ="1[3578][0-9]{8}[^1]{1}"#表示第二位只能输入3、5、8、7的数值,[0-9]则表示输入1-9之间的数据,最后一位不能为1
  if re.match(reg_str_1,test_str):
   print(test_str)
  else:
   print("error")
输出:
  请输入一个电话号码:
    error
  输入一个最后不为1的电话号码:
    15837140221
    error
8)特殊字符\s
代码:
  
  """
  1)\s表示匹配一个空格
  2)\S表示只要不是空格都可以
  3)\w表示任意一个字符都可以[A-Za-z0-9_]都可以
  4)\W表示与\w相反
  """
  #\s的作用
  test_str ="你 好"#汉字
  test_str_1 ="hh aa"#英文
  reg_str_8 ="你\s好"
  reg_str_9 = "hh\saa"
  if re.match(reg_str_8,test_str):
   print(test_str)
  if re.match(reg_str_9,test_str_1):
   print(test_str_1)
  else:
   print("error")
  #\S的作用与\s的作用相反
  test_str ="hhsaa"#英文
  reg_str_10 = "hh\Saa"
  if re.match(reg_str_10,test_str):
   print(test_str)
  else:
   print("error")
  #\w的使用方式
  test_str ="hh@aa"#英文
  reg_str_11 = "hh\waa"#\w相当于[a-zA-Z0-9_]
  if re.match(reg_str_11,test_str):
   print(test_str)
  else:
   print("error")
  #\W的使用方式与\W相反
  test_str ="hh@aa"#英文
  reg_str_12 = "hh\Waa"#\W相当于[a-zA-Z0-9_]相反
  if re.match(reg_str_12,test_str):
   print(test_str)
  else:
   print("error")
输出结果:
  

  你 好
  hh aa
  hhsaa
  error
  hh@aa

9)特殊字符[\u4E00-\9FA5]

代码:
  """
  1)[\u4E00-\u9FA5]只识别汉字
  """
  test_str ="你好"#汉字
  reg_str_13 = "[\u4E00-\u9FA5]+"
  if re.match(reg_str_13,test_str):
   print(test_str)
  else:
   print("error")
运行结果:
  你好
10)特殊字符\d
代码:
  """
  1)\d代表的数字
  """
  test_str = "aaaaaa123"
  reg_str_13 = ".*(.+[2]\d).*"#提起123
  if re.match(reg_str_13,test_str):
  print(re.match(reg_str_13,test_str).group(1))
  else:
   print("error")
结果:
  123
 
 

 

 

Python爬虫之一的更多相关文章

  1. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  2. python爬虫成长之路(一):抓取证券之星的股票数据

    获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为python3.5,意在抓取证券之星上当天所 ...

  3. python爬虫学习(7) —— 爬取你的AC代码

    上一篇文章中,我们介绍了python爬虫利器--requests,并且拿HDU做了小测试. 这篇文章,我们来爬取一下自己AC的代码. 1 确定ac代码对应的页面 如下图所示,我们一般情况可以通过该顺序 ...

  4. python爬虫学习(6) —— 神器 Requests

    Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 H ...

  5. 批量下载小说网站上的小说(python爬虫)

    随便说点什么 因为在学python,所有自然而然的就掉进了爬虫这个坑里,好吧,主要是因为我觉得爬虫比较酷,才入坑的. 想想看,你可以批量自动的采集互联网上海量的资料数据,是多么令人激动啊! 所以我就被 ...

  6. python 爬虫(二)

    python 爬虫 Advanced HTML Parsing 1. 通过属性查找标签:基本上在每一个网站上都有stylesheets,针对于不同的标签会有不同的css类于之向对应在我们看到的标签可能 ...

  7. Python 爬虫1——爬虫简述

    Python除了可以用来开发Python Web之后,其实还可以用来编写一些爬虫小工具,可能还有人不知道什么是爬虫的. 一.爬虫的定义: 爬虫——网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区 ...

  8. Python爬虫入门一之综述

    大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章作为参考,也欢迎大家一共分享学习经验. Pyth ...

  9. [python]爬虫学习(一)

    要学习Python爬虫,我们要学习的共有以下几点(python2): Python基础知识 Python中urllib和urllib2库的用法 Python正则表达式 Python爬虫框架Scrapy ...

  10. python爬虫学习(1) —— 从urllib说起

    0. 前言 如果你从来没有接触过爬虫,刚开始的时候可能会有些许吃力 因为我不会从头到尾把所有知识点都说一遍,很多文章主要是记录我自己写的一些爬虫 所以建议先学习一下cuiqingcai大神的 Pyth ...

随机推荐

  1. 扩展1000!(n!)的尾数零的个数

    #include <stdio.h> #include <malloc.h> //计算1000!尾数零的个数 //扩展n!的尾数零的个数 //2^a * 5^b //obvio ...

  2. python 文件名的操作

    1.文件操作 open()文件句柄:获取文件的路径信息 open() 打开一个文件,获取文件句柄 read() 全部读出出文件中的内容 readline() 读取文件中逐一读取一行数据 readlin ...

  3. WINFORM因为 线程崩溃

    1.如果WinForm程序中使用了线程,而线程调用的代码中会抛出异常,该异常没有任何Try块处理.就会导致程序从主线程中跳出,导致WinForm程序突然崩溃性关闭.2.程序读写某些外部资源,比如数据库 ...

  4. 【转】Android开发:Service和Thread的关系

    不少Android初学者都可能会有这样的疑惑,Service和Thread到底有什么关系呢?什么时候应该用Service,什么时候又应该用Thread?答案可能会有点让你吃惊,因为Service和Th ...

  5. TPYBoard开发板搭建,实现隐秘通信

    一.准备工作 lTPYBoard v102(简称v102) 1块 lTPYBoard v202(简称v202) 1块 l杜邦线.MicroUSB数据线 若干 (成本100元以内,某宝上可以买到) 附上 ...

  6. System.getProperty System.getenv 区别 log4j取法

    log4j 可以${}取系统变量相关属性  getProperty Java提供了System类的静态方法getenv()和getProperty()用于返回系统相关的变量与属性,getenv方法返回 ...

  7. 【原创】分布式事务之TCC事务模型

    引言 在上篇文章<老生常谈--利用消息队列处理分布式事务>一文中留了一个坑,今天来填坑.如下图所示 如果服务A和服务B之间是同步调用,比如服务C需要按流程调服务A和服务B,服务A和服务B要 ...

  8. Activiti开发案例之activiti-app更换数据源

    前言 由于Activiti 默认使用的数据库是H2数据库,重启服务后相关数据会丢失.为了永久保存,所以要配置关系型数据库,这里我们选择 SqlServer ,有钱任性. 环境 Activiti6,Sq ...

  9. Winform让扫描枪听话,防止在有焦点的地方就扫码输入的尴尬

    关注点: 1.扫描枪在扫描到条码后会在有焦点的地方显示扫描到的条码并且可设置扫码后添加回车换行让我很尴尬 2.怎样拦截扫码输入,扫描到条码就自动会嘀一声.不要这么智能行不行.瞎BB 需求详解 公司生产 ...

  10. Django之自带的认证系统 auth模块

    01-Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Dj ...