Min.教你远离剧荒(1)

假期嘛,就应该在家里吹着空调吃着冰棍看着剧。但是,剧荒了该怎么办!
好吧,我感觉最近也是没剧可看,于是我想着能不能自己写个荐剧的小脚本。

打开豆瓣电影,随便找一部影片打开。

每部影片的界面大致如此,看看有什么可以利用来进行筛选的元素。
我大致的思路如此:输入一些自己喜欢的影片,找到这些影片的相似之处,之后再筛选推荐出我可能喜欢的影片。
于是我觉得可以利用右下角的标签过滤出自己喜欢的影片之间的相同点。
右键查看网页源代码,ctrl+F,查找标签:

okay,很容易地找到了标签的位置。

让我们从头开始,首先根据名字查找电影。在豆瓣电影搜索电影名字,很容易发现豆瓣就是地址栏后面加了search。搜索后页面出现了很多电影的名单,找第一个的地址即可,也是右键查看源代码:

发现了电影的地址,这里我使用Python3 + BeautifulSoup4直接得到,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
''' Mingo's movie_recommend script '''
from bs4 import BeautifulSoup
import urllib.request
import urllib.parse
def get_html(url):
send_headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36',
'Accept':'*/*',
'Connection':'keep-alive',
'Host':'movie.douban.com'
}
req = urllib.request.Request(url,headers = send_headers)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
return html
def analyse(html):
soup = BeautifulSoup(html,'lxml')
for i in soup.find_all('a'):
try:
content = i['href']
if '/subject/' in content:
print (content)
break
except:
pass
if __name__ == "__main__":
name = input("movie name:")
url = "https://movie.douban.com/subject_search?search_text=" + urllib.parse.quote(name)
html = get_html(url)
analyse(html)

这里需要注意的是url中的中文处理,这里使用

1
urllib.parse.quote()

进行编码,BeautifulSoup直接获得标签内容。
输出结果得到电影地址,即:

https://movie.douban.com/subject/21817627/

再获得得到的地址网页内容,根据上面的步骤获取标签:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
''' Mingo's movie_recommend script '''
def tag(html):
soup = BeautifulSoup(html,'lxml')
tag = []
for i in soup.find_all('a'):
try:
content = i['href']
if '/tag/' in content:
tag.append(i.string)
except:
pass
return tag[1:]

输入电影地址,返回一个所有标签的列表,这样我们得到了tag:

于是我们准备再对tag进行处理,搜集所有影片的tag,之后对所有tag进行排列组合,再使用tag组合后进行反向搜索得到推荐电影,大致就是这个思路。

今天太迟了打算放到明天再继续。。

未完待续。。

Yumin Huang wechat
快来订阅我的公众号吧-,-
坚持原创分享,来支持一下作者吧~