import urllib.request |
02 |
import re |
03 |
import time |
04 |
05 |
def movie(movieTag): |
06 |
|
07 |
tagUrl=urllib.request.urlopen(url) |
08 |
tagUrl_read = tagUrl.read().decode('utf-8') |
09 |
return tagUrl_read |
10 |
11 |
def subject(tagUrl_read): |
12 |
13 |
''' |
14 |
这里还存在问题: |
15 |
①这只针对单独的一页进行排序,而没有对全部页面的电影进行排序 |
16 |
②下次更新添加电影链接,考虑添加电影海报 |
17 |
③需要追加列表 |
18 |
④导入到本地txt或excel中 |
19 |
⑤在匹配电影名字时是否可以同时匹配链接与名字、评分、评论组成数组 |
20 |
⑥ |
21 |
''' |
22 |
#正则表达式匹配电影的名字(链接)、评分与评论 |
23 |
nameURL = re.findall(r'(http://movie.douban.com/subject/[0-9.]+)\/"\s+title="(.+)"',tagUrl_read) |
24 |
scoreURL = re.findall(r'<span\s+class="rating_nums">([0-9.]+)<\/span>',tagUrl_read) |
25 |
evaluateURL = re.findall(r'<span\s+class="pl">\((\w+)人评价\)<\/span>',tagUrl_read) |
26 |
movieLists = list(zip(nameURL,scoreURL,evaluateURL)) |
27 |
newlist.extend(movieLists) |
28 |
return newlist |
29 |
30 |
#用quote处理特殊(中文)字符 |
31 |
movie_type = urllib.request.quote(input('请输入电影类型(如剧情、喜剧、悬疑):')) |
32 |
page_end=int(input('请输入搜索结束时的页码:')) |
33 |
num_end=page_end*20 |
34 |
num=0 |
35 |
page_num=1 |
36 |
newlist=[] |
37 |
while num<num_end: |
38 |
url=r'http://movie.douban.com/tag/%s?start=%d'%(movie_type,num) |
39 |
movie_url = movie(url) |
40 |
subject_url=subject(movie_url) |
41 |
num=page_num*20 |
42 |
page_num+=1 |
43 |
else: |
44 |
#使用sorted函数对列表进行排列,reverse参数为True时升序,默认或False时为降序,
key=lambda还不是很明白这里的原理 |
45 |
movieLIST = sorted(newlist,
key=lambda movieList
: movieList[1],reverse = True) |
46 |
for movie in movieLIST: |
47 |
print(movie) |
48 |
|
49 |
time.sleep(3) |
50 |
51 |
print('结束') |
本博客介绍如何使用Python爬取豆瓣电影页面,并通过正则表达式提取电影名称、评分和评论等关键信息,进一步整理成易于分析的列表形式。程序通过多次请求不同页码的电影列表,实现对多个页面的电影数据抓取,最终对提取的数据进行排序展示。
1473

被折叠的 条评论
为什么被折叠?



