1.正则表达式基础介绍
Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使用这一内嵌于 Python 的语言工具,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。Python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配。
文中相关知识详解可以参考下面链接:https://www.cnblogs.com/yyyg/p/5498803.html
下面我先讲解入门级的正则表达式,如果需要了解更多,相关链接如上。
re.findall(pattern, string[, flags]):
import re
result=re.findall('a..',text)#.为一个字符,输出可以为abc aac 等等
result=set(result)
print(result)
result=re.findall(' a.. ',text)#如上,输出3个,但是前后都有空格
result=set(result)
print(result)
result=re.findall(' a[a-z][a-z] ',text)#[ ]控制范围如代码所示[a-z]为从a到z的字母 ,可以为b c等等
result=set(result)
print(result)
result=re.findall(' (a[a-z][a-z]) ',text) # ()括起来后,则只输出()里面的东西
result=set(result)
print(result)
result=re.findall(' *([Aa][a-z][a-z]) ',text)# *则是和.一样,但是他可以为空,即为不输出
result=set(result)
print(result)
result=re.findall(' a[a-z][a-z] |A[a-z][a-z] ',text)# | 这里即为或者
result=set(result)
print(result)
上面代码中的text是我随便找的一个文档,大家也可以自行输入
re.match和re.search:
import re
ret_match = re.match("c", "abcde"); # 从字符串开头匹配,匹配到返回match的对象,匹配不到返回None
if (ret_match):
print("ret_match:" + ret_match.group());
else:
print("ret_match:None");
ret_search = re.search("c", "abcde"); # 扫描整个字符串返回第一个匹配到的元素并结束,匹配不到返回None
if (ret_search):
print("ret_search:" + ret_search.group());
基础正则表达式,先介绍到这里,后面会继续讲解,下面开始我们的第一个实际项目,第一个爬虫:
豆瓣电影top250
要求:影片名称,排名,国家,导演等:
1.建议首先将源码爬取下来保存为文件,这样方便自己多次爬取,并且速度快。
with open('E:\\豆瓣top250_html.txt', 'w+',encoding="utf-8") as f:
f.write(html)
2.分析网页链接:可以看出豆瓣top250是有250个电影,他有10个页面所以我们采用如下方式:
for i in pages:
i=i*25
i=str(i)
url='https://movie.douban.com/top250?start='+i+'&filter='
url_list.append(url)
将我们所需要的网址保存下来,后面再次使用;
3.分析网页源码
很容易看出,我们所需要的数据,他们的头标签如上,于是,我们可以写出如下:
for i in soup.find_all('span', class_="title"): # 名字
print(i.text)
name_list.append(i.text)
for i in soup.find_all('p', class_=""): # 看过的总人数
print(i.text)
country_list.append(i.text)
于是,我们即可获取出我们所需要的数据,当然,我们可以将其保存在相关文件中,文件操作,和数据整理,这里就不进行讲解了。