项目地址:https://github.com/xyhcq/top250
我们的项目是爬取豆瓣top250的电影的信息,在做这个项目前,我们都没有经验,完全是从零开始,过程中也遇到了很多困难,不过我们也乐于边学边做。
我们先分析了豆瓣top250的网页源码,发现都是html的代码,我们将我们需要的每组角标对应的信息都记录了下来,用于后续抓取。
top250中每部电影的网页基本都是这种格式:
1 https://movie.douban.com/top250?start=
递归增加的,所以我们后续也用得上
现阶段我们将程序的大体框架构建了出来,在打算进一步写的时候,我们发现,我们需要用到一些新知识:正则表达式以及beautifulsoup,然而悲剧的是,我们都不曾学过,所以组员们在最近都在学习正则表达式,幸运的是,老师最近的课上正好给我们讲了Python的正则表达式re模块的用法,解决了我们的一些问题,我们还需要学习beautifulsoup。
我们的程序框架是这样的:
1 # -*- coding:utf-8 -*- 2 import re 3 from bs4 import BeautifulSoup 4 5 def getHtml(): 6 # 用于获取豆瓣top250网站信息 7 pass 8 9 def getData(): 10 # 解析html,存储获取到的信息 11 # 用于分析获取到的信息 12 13 #电影标题 14 title = [] 15 #电影评论数 16 rating_num = [] 17 range_num = [] 18 #演员 19 actor = [] 20 data = {} 21 pass 22 23 def getInfo(): 24 # 用于处理获取到的信息,如存到列表中 25 # 重点来了,我们不会正则表达式,但是必须用。现在正在学习!!! 26 pass 27 28 def writeMovie(): 29 # 用于将结果写入到文件中 30 f=open("top250.txt","w") 31 f.write("test") 32 f.close() 33 34 getHtml() 35 getData() 36 getInfo() 37 writeMovie()
很简陋,基本上什么功能都没有实现,连写入文件都是现复习的。
运行后当然什么结果也不会显示。
运行后除了能实现写入文件暂时没有什么实质功能。
然后我们学习了正则表达式:
. |
代表任意字符 |
或 |
逻辑“或”操作 |
[] |
匹配内部的任一字符或子表达式 |
[^] |
对字符集和取非 |
- |
定义一个区间 |
对下一字符取非(普通变特殊,特殊变普通) |
|
* |
匹配前面的字符或子表达式0次或多次 |
*? |
惰性匹配上一个 |
+ |
匹配前一个字符或子表达式1次或多次 |
+? |
惰性匹配上一个 |
? |
匹配前一个字符或子串表达式0次或1次重复 |
{n} |
匹配前一个字符或子表达式 |
{m,n} |
匹配前一个字符或子表达式至少m次至多n次 |
{n,} |
匹配前一个字符或子表达式至少n次 |
{n,}? |
前一个的惰性匹配 |
^ |
匹配字符串的开头 |
A |
匹配字符串的开头 |
$ |
匹配字符串的结尾 |
[] |
退格字符 |
c |
匹配一个控制字符 |
d |
匹配任意数字 |
D |
匹配数字以外的字符 |
|
匹配制表符 |
w |
匹配任意数字、字母、下划线 |
W |
不匹配数字、字母、下划线 |
|
|
[0-9] |
0123456789任意之一 |
[a-z] |
小写字母任意之一 |
[A-Z] |
大写字母任意之一 |
d |
等同于[0-9] |
D |
等同于[^0-9],匹配非数字 |
w |
等同于[a-z0-9A-Z_] |
W |
等同于[^a-z0-9A-Z_] |
导入re
import re
re.match(patter,string,flags=0)
patter:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写;多行匹配等等。