使用Python爬取不同类别的豆瓣电影简介
之前做过一点文本分类的工作,从豆瓣上爬取了不同类别的数千条电影的简介。
爬取目标
我们爬取的目标是 豆瓣影视,打开豆瓣网,随便点击一部电影,即可看到电影的介绍、评论等信息,我们需要爬取的是电影的简介部分。
思路
通过Chrome浏览器的调试工具中Network工具,我们可以看出在页面加载的同事,会发送一个Ajax请求查询指定类别的电影列表。
其中url字段即为详情页的链接。
在详情页,通过chrome调试器可以找到对应的标签,并且通过右键查看源代码,并使用ctrl+f (commond+f)可以发现当前页面有且仅有一个property="v:summary"
的标签。
代码实现
由于爬取的数量相对较少,所以我在这里使用了轻量型爬虫工具 BeautifulSoup
$ pip install bs4
第一步是获取电影列表,以及其详情页的url
types = ['爱情', '动作', '恐怖']
for i in range(types):
start = 0
while start < 400:
params = {
"start": start,
"genres": types[i]
}
targetUrl = url + 'start=' + str(start) + "&genres=" + types[i]
try:
r = requests.get(targetUrl)
except:
continue
text = json.loads(r.text)
movies = text['data']
j = 0
for movie in movies:
j += 1
info = getInfoByUrl(movie['url'])
第二步是根据电影的url获取简介
def getInfoByUrl(url):
try:
res = requests.get(url)
html = res.text
soup = BeautifulSoup(html, 'lxml')
span1 = soup.find('span', attrs={'property': 'v:summary'})
span2 = soup.find('span', attrs={'class': 'hideen'})
if span2 != None:
return span2.text
return span1.text
except:
return " "
最后是将结果按照电影类别分别保存到不同的文件中
info = info.replace("\n", "")
info = info.replace(" ", "")
info = info.replace(" ", "")
print(i, start, j)
with open(files[i] + '.txt', 'a+') as f:
f.write(info + "\n")
爬取结果
python spider.py
即可开始爬虫。最后查看当前目录下的txt信息即可得到结果
完整代码已上传至公众号【会编程的Z同学】,后台回复「豆瓣」即可获取。