博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬虫之一
阅读量:4576 次
发布时间:2019-06-08

本文共 4051 字,大约阅读时间需要 13 分钟。

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
 
 
 
 
 
 

 

转载于:https://www.cnblogs.com/hhxz/p/10574121.html

你可能感兴趣的文章
Scala
查看>>
Android 中LinearLayout控件属性
查看>>
面向对象之多态性
查看>>
树状数组
查看>>
【2019.8.14 慈溪模拟赛 T1】我不是!我没有!别瞎说啊!(notme)(BFS+DP)
查看>>
多任务--进程 及 进程间通信
查看>>
多线程/多进程+QProgressBar实现进度条
查看>>
多任务(进程)案例----- 拷贝文件夹
查看>>
Kotlin的快速入门
查看>>
底层原理
查看>>
21. Merge Two Sorted Lists
查看>>
创建数组
查看>>
dict使用
查看>>
ASP.NET MVC的帮助类HtmlHelper和UrlHelper
查看>>
02_ListActive中响应事件 并LogCat输出
查看>>
doubleclick adx note
查看>>
Celery框架
查看>>
[c#]asp.net开发微信公众平台(4)关注事件、用户记录、回复文本消息
查看>>
[转载,感觉写的非常详细]DUBBO配置方式详解
查看>>
Android在Eclipse上的环境配置
查看>>