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 zbbbbbb6)特殊字符|
代码:
""" 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@aa9)特殊字符[\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