前几天在微博上看到李银河对《少年的你》的影评,具体的影评我忘记了,就记得她说在美国的时候养成了看电影的习惯,每天都要看两篇电影,她把豆瓣电影评分八分以上的都看完了,我就想自己平时真的很少看一些好电影,就决定去豆瓣上搜一些好电影来看看。利于不太娴熟的爬虫技术爬取了豆瓣Top250的电影,并把它们的名字保存到csv文件中。
使用requests.get(url)对HTTP发送请求,可以设置一个异常判断语句,通过reponse.status_code==200来判断网络连接是否正常。
我们使用BeautifulSoup来解析网页的内容,在使用这个库之前记得先安装,这个库不是自带的处理库。Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。
-
肖申克的救赎
/ The Shawshank Redemption
/ 月黑高飞(港) / 刺激1995(台)
3.使用find_all函数
使用find_all函数找到我们想要的内容,在这里我只需要电影的名字,名字都是在这样的片段中,如
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)