如何用爬虫爬取豆瓣网Top250的电影信息

使用正则表达式,模拟浏览器爬取电影信息,将信息保存为Excel形式的文件。
适合初学者,直接复制代码即可运行。

代码如下:

#codeing = utf-8
from bs4 import BeautifulSoup   #网页解析,获取数据
import re   #正则表达式,文字匹配
import urllib.request,urllib.error  #制定URL,获取数据
import xlwt #进行Excel操作
import sqlite3  #进行sqlite数据库操作

#影片详情链接的规则
findLink = re.compile(r'')#创建正则表达式对象,表示规则(字符串模式)
#影片图片
findImgSrc = re.compile(r',re.S)#re.S让换行符包含在字符中
#影片标题
findTitle = re.compile(r'(.*)')
#影片评分
findRating = re.compile(r'(.*)')
#评价人数
findJudge = re.compile(r'(\d*)人评价')
#概况
findInq = re.compile(r'(.*)')
#找到影片的相关内容
findBD = re.compile(r'

(.*?)

'
,re.S) #主函数 def main(): baseurl = "https://movie.douban.com/top250?start=" # 1.爬取网页 datalist = getData(baseurl) savepath = "豆瓣电影Top250.xls" # 2.保存数据 saveData(datalist,savepath)#将路径保存 # askURL("https://movie.douban.com/top250?start=") #爬取网页 def getData(baseurl): datalist = [] #存储处理好的电影信息 for i in range(0,10): #调用获取页面信息的函数,10次 url = baseurl + str(i*25) html = askURL(url) #保存获取到的网页源码 # 逐一解析数据 soup = BeautifulSoup(html, "html.parser") for item in soup.find_all('div',class_='item'): #查找符合要求的字符串,形成列表 # print(item) #查看电影item的全部信息 data = [] #保存一部电影的全部信息 item = str(item) #影片详情链接 link = re.findall(findLink,item)[0]#re库通过正则表达式查找指定字符串 data.append(link) #添加链接 imgSrc = re.findall(findImgSrc,item)[0] data.append(imgSrc) #添加图片 titles = re.findall(findTitle,item)#片名可能只有中文名 if(len(titles) == 2): ctitle = titles[0] data.append(ctitle) #添加外国名 otitle = titles[1].replace("/","")#去掉无关的符号 else: data.append(titles[0]) data.append(' ') #外国名字留空 rating = re.findall(findRating,item) data.append(rating) #添加评分 judgeNum = re.findall(findJudge,item) data.append(judgeNum) #添加评价人数 inq = re.findall(findInq,item) if len(inq) != 0: inq = inq[0].replace("。","") data.append(inq) #添加概述,可能会没有 else: data.append(' ') bd = re.findall(findBD,item)[0] bd = re.sub('(\s+)?'," ",bd) #去掉
bd = re.sub('/',' ',bd)#替换 / data.append(bd.strip()) #去掉前后空格 datalist.append(data) #把处理好的一部电影信息放入datalist print(datalist) return datalist #得到一个指定的URL的网页内容(打包成函数 方便重复运行) def askURL(url): head = { #模拟浏览器头部信息,向豆瓣服务器发送消息 "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" } #用户代理,告诉服务器我们是什么类型的浏览器(本质上是告诉浏览器,我们可以接受什么水平的信息) request = urllib.request.Request(url,headers=head) html = '' try: response = urllib.request.urlopen(request) html = response.read().decode('utf-8') except urllib.error.URLError as e:#返回浏览器内部错误 if hasattr(e,'code'): #服务器代码问题 print(e.code) if hasattr(e,'reason'): #捕获失败原因 print(e.reason) return html #保存数据 def saveData(datalist,savepath): print('save.....') book = xlwt.Workbook(encoding='utf-8',style_compression=0) # 创建workbook工作表;style_compression样式压缩效果 sheet = book.add_sheet('豆瓣电影250Top',cell_overwrite_ok=True) # 创建工作表;cell_overwrite_ok覆盖以前内容 col = ("电影详情链接","图片链接","电影中文名","电影外国名","评分","评价数","概况","相关信息") for i in range(0,8): sheet.write(0,i,col[i])#列名 print("第%d条" %(i+1)) for i in range(0,250): print("第%d条" %(i+1)) data = datalist[i] for j in range(0,7): sheet.write(i+1,j,data[j])#数据 book.save(savepath) #主函数调用 if __name__ == "__main__": main() print("爬取完毕")

你可能感兴趣的:(爬虫,python)