前几天在微博上看到李银河对《少年的你》的影评,具体的影评我忘记了,就记得她说在美国的时候养成了看电影的习惯,每天都要看两篇电影,她把豆瓣电影评分八分以上的都看完了,我就想自己平时真的很少看一些好电影,就决定去豆瓣上搜一些好电影来看看。利于不太娴熟的爬虫技术爬取了豆瓣Top250的电影,并把它们的名字保存到csv文件中。
1.requests.get(url)
使用requests.get(url)对HTTP发送请求,可以设置一个异常判断语句,通过reponse.status_code==200来判断网络连接是否正常。
2.BeautifulSoup解析获取的网页内容
我们使用BeautifulSoup来解析网页的内容,在使用这个库之前记得先安装,这个库不是自带的处理库。Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。
<ol class="grid_view">
<li>
<div class="item">
<div class="pic">
<em class="">1</em>
<a href="https://movie.douban.com/subject/1292052/">
<img width="100" alt="肖申克的救赎" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg" class="">
</a>
</div>
<div class="info">
<div class="hd">
<a href="https://movie.douban.com/subject/1292052/" class="">
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
<span class="other"> / 月黑高飞(港) / 刺激1995(台)</span>
</a>
3.使用find_all函数
使用find_all函数找到我们想要的内容,在这里我只需要电影的名字,名字都是在这样的片段中,如<img width="100" alt="肖申克的救赎" 。我们利用find_all函数找到所有的width="100"的所有片段,然后得到我们想要的电影名字。
4.保存
将我们获取的数据保存到csv文件中,为了让每次写入的东西不覆盖,我们使用with open('top250.csv', 'a', encoding='utf-8') as f:。用a替代w。
代码片段如下,供大家参考。
from bs4 import BeautifulSoup
import re
import requests
from requests.exceptions import RequestException
import csv
from urllib.request import urlopen
'''
爬取猫眼Top100的电影
1.写一个函数循环爬取每一页的电影,先判断是否可以正确的连接网页
2.获得电影的名字,并将结果保存到csv中
'''
def judge_html(url):
try:
reponse=requests.get(url)
if reponse.status_code==200: #判断网页连接状态是否正确
return reponse.text
else:
return None
except RequestException:
return None
def spider_100(urltext):
soup=BeautifulSoup(urltext,'html.parser')
#获取所要的电影名字
#将数据保存到CSV文件中
item={'title':'none'}
listname=[]
commentsList = soup.find_all('img', {'width': 100})
for j in range(25):
titlename=commentsList[j]['alt']
item['title']=titlename
listname.append(item)
with open('top250.csv', 'a', encoding='utf-8') as f:
f.write(titlename+'\n')
#listname.append(item)
#print(listname)
if __name__=='__main__':
with open('top250.csv', 'w', encoding='utf-8') as csvfile:
# 爬取某个电影的前10页评论信息;
headers = ['title']
writer = csv.DictWriter(csvfile, headers)
writer.writeheader()
#url="https://maoyan.com/board/4?offset=0"
for i in range(10):
start=i*25
url = "https://movie.douban.com/top250?start=%s&filter="%start
urltexts=judge_html(url)
spider_100(urltexts)